本文已参与「新人创作礼」活动,一起开启掘金创作之路。
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)。**
所以,虽然表现形式不一样,但其本质是一样的,都是指针。