关于指针,我对初学C语言的同窗们真的有话要说!2

昨天,我大胆地从不知道是什么角度,泛泛地把指针的一些问题谈了起来。

今天,我们还是继续再谈谈吧!

在C中如果要说指针的话,其实更确切的说应该是定义的指针变量, 那么对应起来就是指针的常量,这两者之间说起来还是挺好区分的。我们知道变量一定是分配存储空间的,而常量是本来就存在的,那么本质的区别在哪里呢?

还是拿个具体的例子来说一下吧

如果我们int a;定义了一个整型变量发生了什么呢,有同窗就说了真有什么了不起,不久是一个整型变量吗,其实这里面还真有点大家都不注意的门道啊!

第一:这样一条语句如果是放在局部和放在全局是不同的,有什么不同呢?若是放在局部就会在程序的栈区域中申请4个字节的存储空间,但是前提是函数被调用时才分配,如果不调用就不会分配,可是全局的据说是在静态区域内分配存储空间,当然,我我个人认为,在栈也无所谓,如果程序不终止,则栈中预留的空间则不会被销毁。

第二既然分配了空间,那么它就会有一个地址,也就是我们通常用的&a,这就是a变量在内存中虚拟地址,那么这个地址就是相对固定的,所以&a即可称之为一个地址的常量。

第三这个地址开始的向高处的连续的四个单元给了a,因此上a = 5;就是从对&a处开始连续的四个字节赋值5,本意就是第一个字节5,第二个字节,三个字节,四个字节可不能闲着也要,清空为0;这样才算是定义了一个变量

第四如果这是我们又定义了一个int* p;就是又分配了一个指针的存储空间,它将要指向一个整型的变量,&p是这个整型指针变量的地址,而p本身是一个指向整型数据的指针变量,也就是说从&p开始向高处四个单元,这四个单元都是未被初试化,是一些随机的数值,也就是我们通常称为的野指针。

发布了159 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_39410618/article/details/101643286
今日推荐