19、指针与数组

1、指针与数组

在之前的数组的章节中,有提到。数组名保留着数组首个内存地址。
猜想
把指针当数组用,把数组当指针用

2、源码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<stdio.h>
int main()
{
int score[] = {90,95,89};
// 常规操作
printf("=================常规操作=================\n");
for (int i = 0; i < 3; ++i)
{
printf("score[%d]=%d,address=%p\n",i,score[i],&score[i]);
}

// 数组名指向数组的首地址,因此,也可看成是指针
printf("=================数组当指针操作================\n");
for (int i = 0; i < 3; ++i)
{
printf("score[%d]=%d,address=%p\n",i,*(score+i),(score+i));
}

int *p;
p = &score[0];
// 定义指针存放数组首地址
printf("=================指针常规操作=================\n");
for (int i = 0; i < 3; ++i)
{
printf("score[%d]=%d,address=%p\n",i,*(p+i),(p+i));
}

printf("=================把指针当数组=================\n");
for (int i = 0; i < 3; ++i)
{
printf("score[%d]=%d,address=%p\n",i,p[i],&p[i]);
}
return 0;
}
3、运行结果

运行结果

4、内存分布

内存分布

5、总结
  • 当变量为指针时,进行整数相加。如 p+1,则代表往下挪动一个内存地址。
  • 指针与数组密不可分