int (*ptr)[10];我原以为ptr是10整数的指针数组。
我不明白它是一个指向10整数数组的指针。
发布于 2020-09-26 19:04:40
ptr的类型是“指向10int数组的指针”。在您的声明中,它是未初始化的,因此它不指向任何对象。要使其指向数组,请执行以下操作:
int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
// initialize in the declaration:
int (*ptr) [10] = &arr;
// or after:
int (*ptr) [10];
ptr = &arr;发布于 2020-09-26 19:04:20
指向10个int的数组的指针是指向10个元素的数组,如果是2D数组,则指向该数组的给定行,前提是该数组恰好有10列。
指向int的指针数组,int *ptr[10],是这样的,它有10个指向int的指针,每个指针都有一个int的地址,它可以是数组的一部分,也可以不是数组的一部分。
示例1:
int (*ptr)[10];
int arr[10];
ptr = &arr; //correct, arr has 10 elements
int arr2[12];
ptr = &arr2; //not correct, arr2 does not have 10 elements这样的指针可用于指向具有未确定行数但固定列数的2D阵列。
示例2:
int arr[5][10];
ptr = arr; //correct, pointer to the 1st row of a 2D array with 10 cols
ptr++; //now points to the second row
int arr2[5][12];
ptr = arr2; //not correct, incompatible pointer, has too many cols示例3:
int(*ptr)[3];
int arr[2][3] = {{1, 2, 3}, {4, 5, 7}};
ptr = arr;
printf("%d", ptr[1][2]); //array indexing is identical as using arr[1][2] 指向数组的指针与指针的数组
当需要动态分配/释放内存时,指向数组的指针的一个优点就出现了:
具有4行5列的2D数组的示例:
int (*ptr)[5];
ptr = calloc(5, sizeof *ptr); //simple assignment
free(ptr); //simple deallocationint *ptr[5];
for (int i = 0; i < 5; i++) //each pointer needs it's own allocation
ptr[i] = calloc(5, sizeof **ptr);
for (int i = 0; i < 5; i++) //each pointer needs to be freed
free(ptr[i]);另一方面,如果你有一个指针数组,你可以有一个不均匀的数组,也就是说,第一行可以有10个int,但第二行可以有20:
int *ptr[5];
for (int i = 0; i < 5; i++)
ptr[i] = calloc( i + 1, sizeof **ptr);在上面的示例中,2D数组的第一行的空间为1 int,第二行为2,第三行为3,依此类推。
发布于 2020-09-26 19:13:16
我喜欢这样读它:(已经发布了很棒的答案)
int (*ptr) [10];
^ a pointer
^ to an array of 10
^ intsvs
int* ptr[10];
^ array of 10
^ pointer to inthttps://stackoverflow.com/questions/64076876
复制相似问题