苏州吴江区城市建设局网站,什么网站做美式软装设计方案,大学生网站建设申报书,网站设计主题是什么祛魅#xff1a;其实指针这块儿并不难#xff0c;有人说难只是因为基础到进阶没有处理好#xff0c;大家要好好跟着一步一步学习#xff0c;今天我们先来认识一下指针 指针定义#xff1a;指针就是内存地址#xff0c;指针变量是用来存放内存地址的变量#xff0c;在同一…祛魅其实指针这块儿并不难有人说难只是因为基础到进阶没有处理好大家要好好跟着一步一步学习今天我们先来认识一下指针 指针定义指针就是内存地址指针变量是用来存放内存地址的变量在同一CPU构架下不同类型的指针变量所占用的存储单元长度是相同的而存放数据的变量因数据的类型不同所占用的存储空间长度也不同。
有了指针以后不仅可以对数据本身也可以对存储数据的变量地址进行操作。
有些小伙伴可能问题重重我们一句一句的解释~ 指针变量是用来存放内存地址的变量 首先假设我们的内存长这样 以变量a为例指针变量为p 我们发现p就和门牌号一样指向了变量ap就是a的地址也是a的指针
那么如何用代码来表示呢
这个时候就要引入进来两个符号了 取地址* 解引用下面依然以变量a为例我们来写一下代码
#include stdio.h
int main() {int a 10;int* p a;printf(%p\n,p);printf(%p\n, a);return 0;
} 我们可以看到他们的结果是一样的都是a的地址其中 int* 是指针变量中的int类型而 符号则为取地址符号 在同一CPU构架下不同类型的指针变量所占用的存储单元长度是相同的 我们都知道变量类型有 int double float char short 等
同样的指针变量也有这些类型 int* double* float* char* short*PS也可以中间空一格再打出*如 int *
那么 不同类型的指针变量所占用的存储单元长度是相同的 到底对还是不对呢这个时候我们突然想起来 sizeof 好像可以计算字节那么我们就可以用代码来试一试
#include stdio.h
int main() {printf(%zd\n, sizeof(int*));printf(%zd\n, sizeof(double*));printf(%zd\n, sizeof(float*));printf(%zd\n, sizeof(char*));printf(%zd\n, sizeof(short*));return 0;
} 我们发现无论是哪种类型指针变量都是8个字节这是在x64的环境下
而在x86也就是32位的情况下又是几个字节呢 这个时候我们发现在x86下则是四个字节
这就是为什么说是 在同一CPU构架下不同类型的指针变量所占用的存储单元长度是相同的 而存放数据的变量因数据的类型不同所占用的存储空间长度也不同 这句话又该怎么样理解呢
首先我们先来写个代码对比一下这里是以 int* 和 char* 作对比
#includestdio.h
int main() {int n1 0x11223344;char* pi (char*)n1;*pi 0;printf(%x\n, n1);int n2 0x11223344;int* pc n2;*pc 0;printf(%x\n, n2);return 0;
} 我们发现他更改的字节不同char*只能改一个字节而int*则都改掉了
这样我们就可以理解这句话了 今天我们就先说到这里给大家打下一个良好的基础下次我们再一步一步来学习