C语言中指针变量简述

指针是变量,那必然会有变量类型,因此这里必须对变量类型做解释。在c语言中,所有的变量都有变量类型,整型、浮现型、字符型、指针类型、结构体、联合体、枚举等,这些都是变量类型。变量类型的出现是内存管理的必然结果,相信读者知道,所有的变量都是保存在计算机的内存中,既然是放到计算机的内存中,那必然会占用一定的空间,问题来了,一个变量会占用多少空间呢,或者说应该分出多少内存空间来放置该变量呢?为了规定这个,类型由此诞生了,对于32位编译器来说,int类型占用4个字节,即32位,long类型占用8字节,即64位。这里简单说了类型主要是为后面引出指针这个特殊性,在计算机中,将要运行的程序都保存在内存中,所有的程序中的变量其实就是对内存的操作。
#include stdio.hint main(int argc, char **argv){ unsigned int a = 10; unsigned int *p = null; p = &a; printf(&a=%d\n,a); printf(&a=%d\n,&a); *p = 20; printf(a=%d\n,a); return 0;} 运行之后,结果如图:
      指针也是一个变量,那个指针也应该被存放在内存中,对于32位编译器来说,其寻址空间为2^32=4gb,为了能够都操作所有内存(实际上普通用户不可能操作所有内存),指针变量存放也要用32位数即4个字节。这样就有指针的地址&p,指针和变量的关系可以用如下图表示:
从上图可以看到&p是指针的地址,用来存放指针p,而指针p来存放变量a的地址,也就是&a,还有一个*p在c语言中是解引,意思是告诉编译器取出该地址存放的内容。
       对于不同类型指针而言,其p+1所指向的地址不同,这个递增取决于指针类型所占的内存大小,而对于((unsigned int)p)+1,该意思是将地址p所指向的地址的值直接转换为数字,然后+1,这样无论p是何种类型的指针,其结果都是指针所指的地址后一个地址。
        从上述可以看到,指针的存在使得程序员可以相当轻松的操作内存,这也使得当前有些人认为指针相当危险,这一观点表现在c#和java语言中,然而实际上用好指针可以极大的提高效率。下面深入一点来通过指针对内存进行操作,现在我们需要对内存6422216中填入一个数据125,我们可以如下操作:
unsigned int *p=(unsigned int*)(6422216);*p=125;
西门子MES平台在湖北卷烟厂中的应用
自制万用表升压电路(三款万用表升压电路设计方案详解)
基于有限状态机(FSM)的SiC MOSFET开关瞬态建模
为何对区块链技术如此重视
特斯拉车型的需求旺盛而交不了车?
C语言中指针变量简述
国民技术与Intel达成合作推进可信计算
回顾六大亮点推动生态圈建设的相关活动和介绍
激光雷达激烈战,Velodyne推新款128线激光雷达传感器
LED显示屏驱动IC技术的重要性和作用
有没有高性价比的供应商管理系统
服务机器人在市场上要走的路还很长
数字分身的普及率和讨论热潮都在持续成长并也是物联网布局的下一步骤
量子力学中的自由粒子到底是怎么回事呢?
恒温电烙铁电路图
如何制作一个对流量进行远程监控的系统
我们离真正意义上的自动驾驶究竟有多远?中国企业有哪些机遇和挑战?
千兆采样ADC快速运行以解决新挑战
HMS是射向谷歌的一发和平弹?培育HMS生态之路未必好走
5G加速垂直行业规模化商用