数组
数组名。
1.数组名是一个指针常量。
2.两种情况数组名不用指针常量表示。
sizeof +数组名 :返回数组的长度。不是指向数组的指针的长度。
& +数组名:指向数组的指针。 不是指向某个指针常量的指针。
3.赋值。
int a[10];
int b[10];
int *c;
c=&a[0];//指向数组第一个元素的指针。数组名本身的值。
c=a;//同上,数组名赋值的是一个指针的拷贝。而不是整个数组。
b=a;//非法。数组名不表示整个数组。必须使用循环赋值。
a=c;//非法。a是常量,不能修改。
下标引用
1.下标引用和间接访问完全相同。
/*下标引用*/
int array[10]={0,1,2,3,4,5,6,7,8,9};
int *ap = array +2;
printf("%d",ap[0]);//指针可以下标引用,与间接访问一样,对等的间接访问表达式为*(ap+0)
printf("%d",ap[-1]);//负值的下标引用,*(ap-1)
printf("%d\n",ap[9]);//越界,但不提示错误。下标引用可以作用任意的指针,而不是数组名,所以编译器不会报错。
printf("%d",2[array]);//合法的,但是可读性差,*(2+array)