湖南省长沙建设工程造价站网站,隆昌市住房和城乡建设厅网站,服装加工厂网站建设方案计划书,wordpress 编辑主题 保存C语言灵魂指针1.什么是指针#xff1f;2.指针的大小3.指针的分类3.1比较常规的指针类型3.2指针的解引用操作3.3野指针野指针的成因#xff1a;4.指针运算4.1指针加减整数4.2指针-指针1.什么是指针#xff1f;
这个问题我们通常解释为两种情况#xff1a; 1.指针本质#…
C语言灵魂指针1.什么是指针2.指针的大小3.指针的分类3.1比较常规的指针类型3.2指针的解引用操作3.3野指针野指针的成因4.指针运算4.1指针加减整数4.2指针-指针1.什么是指针
这个问题我们通常解释为两种情况 1.指针本质指针是内存中一个最小单元编号也就是地址 2.我们通常说的指针其实是表示指针变量是用来存放地址的变量工具 总结指针是指针变量用于存放变量地址的变量工具本质是地址
2.指针的大小
指针大小这里就直接给出答案 在32位平台指针地址大小为4个字节 在64位平台指针地址大小为8个字节
3.指针的分类
指针分类还是比较多也相对来说比较丰富接下来我们就一个个来了解指针的类型吧
3.1比较常规的指针类型
char *p NULL;
short *p NULL;
int *p NULL;
long *p NULL;
float *p NULL;
double*p NULL;有上面的比较常见的指针类型不难得出指针的定义方式为----type * 而且这里还有个性质 定义的type为什么类型那么指针变量存储的相应类型的变量地址。 举个例子 比如char*类型的指针是为了存放char类型变量的地址
char chw;
char *pch;
//这里取地址符号是为了取出ch变量的地址提出疑问指针这么多类型有什么意义呢 回答不同类型的指针也就有着不同的“步长”也就是一次性访问的字节大小比如char指针一次访问1个字节而int类型的指针一次性就可以访问4个字节。这在C语言的底层 意义重大。
说道“步长”就有必要说一下指针加减整数 这里就可以看见char类型的指针加整数1地址变化了1个字节而int类型的指针加1地址变化了4个字节
3.2指针的解引用操作
#include stdio.h
int main()
{int n 0x11223344;char *pc (char *)n;int *pi n;*pc 0; //重点在调试的过程中观察内存的变化。*pi 0; //重点在调试的过程中观察内存的变化。return 0;}这里我们可以看到char类型的pc指针只改变了n的第一个字节接着往下运行 我们也容易的发现int类型的pi指针直接把n的4个字节都变成了0 在个例子中pc或者是pi如果都按整形打印那么他们完全就是整形n的值* 变量指针就是访问变量指针地址若打印规定%d整形打印他就会往后把4个字节都翻译了翻译过程就是补码到原码的过程 这里也是表明不同类型解引用访问的内存大小不同 3.3野指针
概念野指针就是指针指向的位置是不可知道的随机的、不正确的、没有明确限制的
野指针的成因
1.指针未初始化 2.指针越界访问 3.指针指向空间释放
4.指针运算
4.1指针加减整数
指针加减整数也就是在原指针的基础上增加或者减少 整数 * sizeotype 例如
#includestdio.h
int main()
{
int arr[10] { 1,2,3,4,5,6,7,8,9,10 };int* p1 arr;
int* p2 arr 4;printf(p1%p\np2%p, p1, p2);return 0;
}我们可以发现p2p14相当于增加4*sizeofint也就是16
4.2指针-指针
指针减指针代表的是两个地址之间的距离两地址之间相差的元素个数int类型返回的是int数据。指针和指针之间是没有相加的相加没有意义 总有浪漫值得奔赴