c语言数组的本质-就是指针

925 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。​​ ​

c语言当中,经常用数组与指针,有时数组以指针的形式用,有时指针以数组的形式用,让人感觉有些迷惑,如下:

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <string.h>
  4 #define NUM 2
  5 
  6 int main()
  7 {
  8     int a[NUM] = {1, 2};
  9     int i;
 10     for(i = 0; i < NUM; i++)
 11     {
 12         printf("a[%d]=%d\n", i, a[i]);
 13         printf("*(a+%d)=%d\n", i, *(a+i));
 14     }
 15 
 16     int *b = (int *)malloc(NUM * sizeof(int));
 17     *(b) = 1;
 18     *(b+1) = 2;
 19     for(i = 0; i < NUM; i++)
 20     {   
 21         printf("b[%d]=%d\n", i, b[i]);
 22         printf("*(b+%d)=%d\n", i, *(b+i));
 23     }
 24 }
root@mkx:~/learn/arAndPointer# gcc arAndPointer.c -o arAndPointer
root@mkx:~/learn/arAndPointer# ./arAndPointer 
a[0]=1
*(a+0)=1
a[1]=2
*(a+1)=2
b[0]=1
*(b+0)=1
b[1]=2
*(b+1)=2

从上面可以看出,指针可以以数组的形式使用,即通过a[i]这种形式访问;数组可以通过指针的形式访问,原因何在呢?

原因是因为:a[1] 与(a+1)是等价的,就是编译器遇上了a[i],会编译成:(a+i)。**

所以,虽然表现形式不一样,但其本质是一样的,都是指针。