dou*_*leE 5 c arrays types pointers kr-c
在KR C book 112页中,它说:
int (*arr1)[10];
Run Code Online (Sandbox Code Playgroud)
是一个指向10个整数数组的指针.我不知道上面和下面有什么区别:
int arr2[10];
Run Code Online (Sandbox Code Playgroud)
1- arr2本身不是指向10个整数数组的指针吗?(因为数组的名称本身就是指针.)
2-如果数组的名称是阵列地址和指针数组,则两个arr1和arr2是指向整数数组,是不是这样的吗?
arr2本身不是指向10个整数数组的指针吗?
不,这是一个阵列.
数组的名称不是数组的地址和指向该数组的指针吗?
数组名称可以转换为指向其第0个元素(而不是整个数组)的指针.
所以arr1和arr2都是指向整数数组的指针?
没有.
arr1 是一个指向10个整数数组的指针.arr2是一个10个整数的数组.在大多数上下文中,它转换为指向整数的指针(不是指向数组的指针).例如,检查这个错误的示例:
#include <stdio.h>
int main(void)
{
int arr2[10] = {0};
arr2[5] = 747;
int (*arr1)[10] = {0};
arr1[5] = 747;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在这里,我标本兼治arr1,并arr2为"同样的事情",我得到这个错误:
C02QT2UBFVH6-lm:~ gsamaras$ gcc -Wall main.c
main.c:9:13: error: array type 'int [10]' is not assignable
arr1[5] = 747;
~~~~~~~ ^
1 error generated.
Run Code Online (Sandbox Code Playgroud)
但如果我这样做:
arr1[0][5] = 747;
Run Code Online (Sandbox Code Playgroud)
它将通过编译!同样的,(*arr1)[5] = 747;当然.