1.数组类型与指针类型
int a[6] = {
1,2,3,4,5,6};
int* p = a;
int lenA = sizeof(a)/sizeof(int);
int lenP = sizeof(p)/sizeof(int);
printf("lenA=%d,lenP=%d.\n",lenA,lenP);
lenA=6;lenP=1;
因为两种类型是不同的,虽然在他们都是指向a数据的a[0]。
数组类型:int[6],我们可以知道这个a指针指向的是一个数组,他的长度为6,所以数据长度会等于:64=24。
指针类型:int,我们只知道他是指向a[0],是个int类型,并不知道他是指向一个数组,所以最后长度等于:14 = 4。
int a[3][3] = {
0};//长度为:3*3*4 = 36
2.数组下标用指针来理解
实际上,数组下标,是通过指针与偏移量来确定数组各个位置的数据。
a[3]实际上可以用*(a+3)来表示。实际上还能用3[a]来表示,即*(3+a)。编译器会自动去换算实际类型的大小,例如:
int a[3] = {
1,2,3};//a[2]是从a[0]跳两个int大小,即8
char a[] = "hello";//a[2]是从a[0]跳两个char大小,即2
3.数组在函数传值时的隐式转换