数组
用一段代码来让对数组有更深的理解
#include <stdio.h>
int main(void)
{
int arr[3]={1};
printf("arr[0]地址:%p\n",arr);
printf("arr[1]地址:%p\n",arr+1);
printf("arr[2]地址 :%p\n",arr+2);
return 0;
}
地址的补充
数组名 就是 首地址
运行结果
arr[0]地址:0061FF14
arr[1]地址:0061FF18
arr[2]地址 :0061FF1C
为什么出现这些效果
1 定义了int类型 int ---四个字节 并且系统为数组每个元素分配 独立的空间
2 这个空间大小 是 int 类型的
3 数组元素是离散 并且有规律可言 每次都是加1*4个字节得到下一个
0061FF14+4=:0061FF18 0061FF18 +4=0061FF1C
c就是 12 0123456789abc 刚刚好12 (a=10)
指针数组
定义一个指针变量
int*p;//*告诉计算机声明我是一个指针变量 并且是指向int类型的
定义一个指针数组
int *p[4];
涉及到优先级问题(很重要 慢慢体会)
由于[] 比* 优先级 高 所以 p先会[4]结合 形成 p[4] 显示是数组形式
表示p数组有四个元素 最后和p前面的*结合 ,表示数组是指针类型的
指针数组 本质就是数组
1)代码
#include <stdio.h>
int main(void)
{
int a = 10;
int b = 11;
int c = 12;
int d = 13;
int *p[4];
p[0]=&a;//初始化
p[1]=&b;//初始化
p[2]=&c;//初始化
p[3]=&d;//初始化
printf("指针1元素%d\n",*p[0]);
printf("指针2元素%d\n",*p[1]);
printf("指针3元素%d\n",*p[2]);
printf("指针4元素%d\n",*p[3]);
return 0;
}
指针数组的重新认知
根据上面说到的优先级的概念 指针数组 首先是数组,然后才是指针类型的
现在 先不管类型问题 我们可以根据数组名就是地址 的概念延伸
数组名偏移之后 他还是地址 这里也是一样 有四个地址 地址都是指针类型的
并且一个地址有一个元素 又因为指针===地址
最后可以说 一个指针对应一个数组元素