如何在 C/C++ 中描述指向数组的常量指针?
How describe const pointer to an array in C/C++?
我知道指向 int[10] (ptr->int[10])
的指针类型是 int (*var)[10]
,
但是blow类型的怎么形容呢?
指向 const int[10] (ptr->const int[10])
的类型
const
指向 int[10]
(const ptr->int[10])
的指针的类型
const
指向 const int[10] (const ptr->const int[10])
的类型
像你一样声明变量:
const int somevar[10];
现在用新的类型名替换变量名并在前面加上 typedef。
typedef const int ci10_type[10];
现在ci10_type
是const int [10]
的类型
您也可以对更复杂的类型执行类似操作,只要您知道如何声明这些类型即可。 (功能和数据)
typedef const int *cpi10_type[10];
typedef const int (*pci10_type)[10];
对于指向这些类型的指针,您可以使用:
ci10_type *pci10var;
int (*ptr1)[10] = malloc(sizeof(int)*10); // Pointer to int[10]
const int (*ptr2)[10] = malloc(sizeof(int)*10); // Pointer to const int[10]
int (* const ptr3)[10] = malloc(sizeof(int)*10); // const Pointer to int[10]
const int (* const ptr4)[10] = malloc(sizeof(int)*10);// const Pointer to const int[10]
*ptr1[0] = 10; // OK.
*ptr2[0] = 10; // Not OK.
*ptr3[0] = 10; // OK.
*ptr4[0] = 10; // Not OK.
ptr1 = realloc(ptr1, sizeof(int)*10); // OK.
ptr2 = realloc(ptr2, sizeof(int)*10); // OK.
ptr3 = realloc(ptr3, sizeof(int)*10); // Not OK.
ptr4 = realloc(ptr4, sizeof(int)*10); // Not OK.
我知道指向 int[10] (ptr->int[10])
的指针类型是 int (*var)[10]
,
但是blow类型的怎么形容呢?
指向 const int[10] (ptr->const int[10])
const
指向 int[10]
(const ptr->int[10])
const
指向 const int[10] (const ptr->const int[10])
像你一样声明变量:
const int somevar[10];
现在用新的类型名替换变量名并在前面加上 typedef。
typedef const int ci10_type[10];
现在ci10_type
是const int [10]
您也可以对更复杂的类型执行类似操作,只要您知道如何声明这些类型即可。 (功能和数据)
typedef const int *cpi10_type[10];
typedef const int (*pci10_type)[10];
对于指向这些类型的指针,您可以使用:
ci10_type *pci10var;
int (*ptr1)[10] = malloc(sizeof(int)*10); // Pointer to int[10]
const int (*ptr2)[10] = malloc(sizeof(int)*10); // Pointer to const int[10]
int (* const ptr3)[10] = malloc(sizeof(int)*10); // const Pointer to int[10]
const int (* const ptr4)[10] = malloc(sizeof(int)*10);// const Pointer to const int[10]
*ptr1[0] = 10; // OK.
*ptr2[0] = 10; // Not OK.
*ptr3[0] = 10; // OK.
*ptr4[0] = 10; // Not OK.
ptr1 = realloc(ptr1, sizeof(int)*10); // OK.
ptr2 = realloc(ptr2, sizeof(int)*10); // OK.
ptr3 = realloc(ptr3, sizeof(int)*10); // Not OK.
ptr4 = realloc(ptr4, sizeof(int)*10); // Not OK.