指针与数组
指针数组,数组指针,指针法访问数组,分不清如何使用,下面将帮你疏通思路,更好理解他们的关系。
数组名的本质
int array[5];
printf("array = %o\n",array);
printf("&array = %o\n",&array);
printf("&array[0] = %o\n",&array[0]);

指针法操作数组元素
可以通过*array来操作数组的首元素,但如果想要操作第二个元素,要怎么办呢?地址也是可以进行运算操作的,通过改变地址的值来指向不同的内存,这样就有可能操作数组的第二个元素。 首先看看数组的元素地址

int array[5];
int *ptr = array;
printf("ptr = %o\n",ptr);
printf("ptr+1 = %o\n",ptr+1);

*(ptr+1) = 2;
*(ptr+2) = 3;
也可以使用[ ]的形式操作, *与[ ]的效果一样,编译器内部做了处理。
ptr[1] = 2;
ptr[2] = 3;


指针步长在一维数组与二维数组
一维数组
int array[5] = {1,2,3,4,5};
printf("array: %u array+1: %u\n",array,array+1);
printf("&array: %u &array+1: %u\n",&array,&array+1);
printf("sizeof(array) = %d\n",sizeof(array));

二维数组
int array[2][3] = {1,2,3,4,5,6};
printf("array[0]: %u array[0]+1: %u\n",array[0],array[0]+1);
printf("array: %u array+1: %u\n",array,array+1);
printf("&array: %u &array+1: %u\n",&array,&array+1);
printf("sizeof(array) = %d\n",sizeof(array));
printf("sizeof(array[0]) = %d\n",sizeof(array[0]));

注意事项
数组名不可以为左值,数组名虽然本质是一个地址,但这个只可以读,不可以修改。
int array1[5];
int array[5];
int *ptr = array1;
array = ptr; //error,编译出错
指针与数组的简单介绍到此结束