int arr[10];
定义了一个数组arr
arr——(数组名)代表首元素地址
&arr[0]——也代表首元素地址
&arr——代表数组的地址
上述三个变量的值是相同的,但是第三个和前两个的含义不同。
数组名在一般情况下是首元素的地址,但是有两个例外
1. 使用sizeof(arr)求数组长度——此时数组名并不代表首元素地址,而是代表整个数组
2.&arr不代表首元素地址,而是代表整个数组的地址。
如果使用sizeof(&arr),得到的结果是4个字节,因为求的就是这个地址占用的空间大小。
数组指针
 C语言数组指针和指针数组int (* arrPtr)[10] = NULL; // 一个指针,它指向一个有10个int元素的数组
int matrix[3][10]; // 3行,10列的数组
// 数组名称是一个指向第一个元素的指针,也就是第一行的指针
arrPtr = matrix; // 使得arrPtr指向矩阵的第一行
(*arrPtr)[0] = 5; // 将5赋值给第一行的第一个元素
arrPtr[2][9] = 6; // 将6赋值给最后一行的最后一个元素
++arrPtr; // 将指针移动到下一行
(*arrPtr)[0] = 7; // 将7赋值给第二行的第一个元素
或者
typedef int ARRAY_t[10]; // 定义一个“具有10个元素数组”类型名称
ARRAY_t a, // 具有该类型的数组
*arrPtr; // 一个指向该数组类型的指针
arrPtr = (ARRAY_t *)a; // 使得arrPtr指向a
数组a,会被隐式地转换为指针,指向数组第一个元素,而不是指向整个数组。指向 int 的指针没有被隐式地转换为指向 int 数组的指针。本例中的赋值操作需要显式的类型转换,在类型转换运算符中明确指定目标类型是:ARRAY_t *
C 数组和地址,数组指针:等您坐沙发呢!