零基础学c语言言,关于指针

对这方面感兴趣,想要学习C/C++或者在学习C/C++可以加群:或者好友:

前天我发的文章评论下面有个读者说要我发一下指针的,我说昨天发来着,,不过昨天有事不在,所以今天补上。

让我们先来看一下代码:

假如我们的a的地址是:0Xbfe2e100, 而且是32位机,那么这个程序会输出什么?

第三条printf语句可能是你最头疼的,我们怎么知道a的地址?我不知道吗?可不就是bfe2e100。那岂不成了a==&a啦?这怎么可能?自己存自己的?也许很多人会觉得指针和数组是一回事,那么你就错了。如果是 int *a,那么没有问题,因为a是指针,所以 &a 是指针的地址,a 和 &a不一样。但是这是数组啊a[],所以&a其实是被编译成了

对这方面感兴趣,想要学习C/C++或者在学习C/C++可以加群:或者好友:

今天很多语言进化得很高级了,语法也越来越复杂和强大,但是C语言依然光芒四射,C语言的这些设计思路将永远不朽。

本文由百家号作者上传并发布,百家号仅提供信息发布平台。文章仅代表作者个人观点,不代表百度立场。未经作者许可,不得转载。

}

 C语言这门课程里,初次接触到指针这一章节时,对于指针的理解我很模糊,所以就通过程序和调试来加深对指针的理解。

1.为了理解p和*p到底代表了什么,调试得到如下结果:


可以看到,指针变量p的值和变量a的地址相同,*p等于变量a的值。也就是说,指针等同于一个地址,解引用(*p)为该地址上内存单元存储的的值(a)。

在此基础上,又有两个新问题:

(1)解引用的改变,会对变量a产生影响吗?测试如下:


显而易见,*p赋值为100后,变量a的值也变为了100。

(2)改变指针变量p的指向,*p会变化吗?测试如下:


可以看到指针变量p指向了变量b,并且*p也变为了变量b的值。

2.既然指针变量p储存了变量a的地址,那么指针变量p也是有地址的,可以定义一个二级指针变量*pp指向指针变量p:


二级指针变量*pp的解引用**pp为变量b的值。

3.那么二级指针变量*pp的改变,会影响指针变量p吗?测试如下:


可以看到二级指针变量*pp指向变量a后,指针变量p也指向了变量a,并且解引用*p和**pp也都变为了变量a的值:10。


}

我们在使用c语言进行编写程序的时候,就一定会使用上指针,指针的操作是编写程序的一个点。

如何更好的使用指针,将是我们进行更好的书写程序的关键。

这里,小编就分享一下自己在使用c语言编程过程中,对于指针的理解:

1:指针是一个地址,指向的是个类型:

我们知道,c语言中的类型有int,char,bool(这个不常用),一般我们使用int,char就可以满足一般的类型需求的,如果对于变量的长度过大,就是用long ,float,double,关于各个类型使用的的长度问题,可以使用sizeof(int)或者sizeof(long)来查看各个类型,在系统中的小。

而指针就是一个8个字节(64系统)。

2:指针指向的是地址,地址指向的是内容:

我们需要一个变量,来存储地址,这个变量的值是地址,但是我们可以通过修改变量的值,来不断的改变地址,但是,我们如果需要改变该个地址的值的话,就需要,对地址的值进行修改,而不改变地址。

这里我们看到,p 是一个变量,我们使用p来存储变量a的地址,这是,我们使用*p对于这个变量进行赋值,那么a的值最后,是多少呢,结果是11,因为我们使用*p赋值,就相当于a=11,赋值效果一样的。

3:指针的指针,是面对于指针的变量:

我们说,指针的指针的时候,就有点不清楚了,到底怎么区分指针和指针的指针呢。

我们这样看就清楚了一点,char *(*pr); *pr是一个存储的值为指针的变量,pr就是存储上个变量地址的变量。整合起来就是,pr是一个存储的值为指针的地址的变量。

这样,我们就基本,对于指针有一个直接的了解了。

经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。

作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
}

我要回帖

更多关于 零基础学c语言 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信