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,取出对应的内容

posted @ 2017-06-08 06:28  叕叒双又  阅读(324)  评论(0编辑  收藏  举报