1. 一维数组名就是数组的首地址
在一维数组中a表示数组首元素地址。
#include <stdio.h> #include<stdlib.h> int main() { int a[3] = {1,2,3}; int *p,*p1; p1 = &a[0]; p = a; printf("%d\n",*p); printf("%d\n",*p1); system("pause"); return 0; }
运行效果如下所示:
2.二维数组
定义一个二维数组如下所示:
int a[2][2] = {{3,4},{1,2}};
2.1
a[0] :a[0]中第1列元素的地址,&a[0][0]。
a[1]:第2列元素的地址,&a[1][0]。
测试代码:
#include <stdio.h> #include<stdlib.h> int main() { int a[2][2] = {{3,4},{1,2}}; printf("%d\n",*a[0]); printf("%d\n",*a[1]); system("pause"); return 0; }
运行结果如下:
2.2
在二维数组中a表示第1行元素的地址,a+ i表示第i行元素的地址。
#include <stdio.h> #include<stdlib.h> int main() { int a[2][2] = {{3,4},{1,2}}; printf("%d\n",*(a[0]+0)); printf("%d\n",*(a[0]+1)); printf("%d\n",*(a[1]+0)); printf("%d\n",*(a[1]+1)); system("pause"); return 0; }
运行结果如下:
2.3
*a:相当于首行首元素地址。
测试代码
#include <stdio.h> #include<stdlib.h> int main() { int a[2][2] = {{3,4},{1,2}}; printf("%d\n",*a[0]); printf("%d\n",**a); system("pause"); return 0; }
2.4
*a==a[0]==&a[0][0]
测试代码:
#include <stdio.h> #include<stdlib.h> int main() { int a[2][2] = {{3,4},{1,2}}; printf("%d\n",*a); printf("%d\n",a[0]); printf("%d\n",&a[0][0]); system("pause"); return 0; }
运行结果如下所示:
int a[3] = {1,2}; *a :1 int a[2][2] = {{3,4},{1,2}}; *a 是{3,4}的首地址