24深入理解C指针之---指针和数组
一、指针和数组
1 #include <stdio.h> 2 3 int main(int argc, char **argv) 4 { 5 int vector[5] = {1, 2, 3, 4, 5,}; 6 int *ptrVector = vector; 7 int size = sizeof(vector)/sizeof(int); 8 9 printf("Used arr:\n"); 10 for(int i = 0; i < size; i++){ 11 printf("vector[%d]: %d\n", i, vector[i]); 12 } 13 printf("\n"); 14 15 printf("Used ptr:\n"); 16 for(int i = 0; i < size; i++){ 17 printf("vector[%d]: %d\n", i, *(ptrVector + i)); 18 } 19 printf("\n"); 20 21 printf("Special used arr:\n"); 22 for(int i = 0; i < size; i++){ 23 printf("vector[%d]: %d\n", i, i[vector]); 24 } 25 printf("\n"); 26 27 printf("Special used ptr:\n"); 28 for(int i = 0; i < size; i++){ 29 printf("vector[%d]: %d\n", i, *(i + ptrVector)); 30 } 31 printf("\n"); 32 33 printf("The vector size: %d\n", size); 34 35 return 0; 36 }
1、代码说明:
1)、9-13行的代码展示了一般的访问数组的方式
2)、15-19行的代码展示了使用指针访问数组的方式
3)、21-25行的代码展示了使用交换指针访问数组的方式
4)、27-31行的代码展示了使用交换数组和下标的访问数组方式
5)、若存在第5和第6行代码,则存在vector[i] <=> *(ptrVector + i),因此必然存在 i[vector] <=> *(i + ptrVector),因此存在21到31行的代码
2、特殊说明:
1)、数组名称本身可以表示数组的地址,可以使用ptrVector = vector语句实现指针赋值;
2)、也可以使用&实现获取地址,使用ptrVector = &vector语句实现指针变量的赋值
3)、可以使用*(ptrVector + i)访问索引为i的数组元素
4)、可以使用*(vector + i)访问索引为i的数组元素
5)、使用数组名运算时,需要主要添加的是整个数组的大小
6)、vector[i] 的机器码是从vector地址开始,移动i个位置,取出对应的内容
7)、*(vector + i)的机器码是从vector地址开始,在地址上增加i,取出对应的内容
人就像是被蒙着眼推磨的驴子,生活就像一条鞭子;当鞭子抽到你背上时,你就只能一直往前走,虽然连你也不知道要走到什么时候为止,便一直这么坚持着。