找回密码
 注册
关于网站域名变更的通知

C语言中变量地址赋值

2025-1-6 16:33| 查看: 72| 评论: 0

摘要: 在 C 语言中,变量的地址往往都是编译系统自动分配的,对我们用户来说,我们是不知道某个变量的具体地址的。所以我们定义一个指针变量 p,把普通变量 a 的地址直接送给指针变量 p 就是 p = a;这样的写法。 对于 ...
101.jpg

在 C 语言中,变量的地址往往都是编译系统自动分配的,对我们用户来说,我们是不知道某个变量的具体地址的。所以我们定义一个指针变量 p,把普通变量 a 的地址直接送给指针变量 p 就是 p = &a;这样的写法。


对于指针变量 p 的定义和初始化,一般有两种方式,这两种方式,初学者很容易混淆,因此这个地方没别的方法,就是死记硬背,记住即可。


方法 1:定义时直接进行初始化赋值。


unsigned char a;


unsigned char *p = &a;


方法 2:定义后再进行赋值。


unsigned char a;


unsigned char *p;


p = &a;


大家仔细看会看出来这两种写法的区别,它们都是正确的。我们在定义的指针变量前边加了个*,这个*p 就代表了这个 p 是个指针变量,不是个普通的变量,它是专门用来存放变量地址的。此外,我们定义*p 的时候,用了 unsigned char 来定义,这里表示的是这个指针指向的变量类型是 unsigned char 型的。


指针变量似乎比较好理解,大家也能很容易就听明白。但是为什么很多人弄不明白指针呢?因为在 C 语言中,有一些运算和定义,他们是有区别的,很多同学就是没弄明白它们的区别,指针就始终学不好。这里我要重点强调两个区别,只要把这两个区别弄明白了,起码指针变量这部分就不是问题了。这两个重点现在大家死记硬背,直接记住即可,靠理解有可能混淆概念。


第一个重要区别:指针变量 p 和普通变量 a 的区别。


我们定义一个变量 a,同时也可以给变量 a 赋值 a = 1,也可以赋值 a = 2。


我们定义一个指针变量 p,另外还定义了一个普通变量 a=1,普通变量 b=2,那么这个指针变量可以指向 a 的地址,也可以指向 b 的地址,可以写成 p = &a,也可以写成 p = &b,但就是不能写成 p = 1 或者 p = 2 或者 p = a,这三种表达方式都是错的。


因此这个地方,不要看到定义*p 的时候前边有个 unsigned char 型,就错误的赋值 p=1,这个只是说明 p 指向的变量是这个 unsigned char 类型的,而 p 本身,是指针变量,不可以给它赋值普通的值或者变量,后边我们会直接把指针变量称之为指针,大家要注意一下这个小细节。


前边这个区别似乎比较好理解,还有第二个重要区别,一定要记清楚。


第二个重要区别:定义指针变量*p 和取值运算*p 的区别。


“*”这个符号,在我们的 C 语言有三个用法,第一个用法很简单,乘法操作就是用这个符号,这里就不讲了。


第二个用法,是定义指针变量的时候用的,比如 unsigned char *p,这个地方使用“*”代表的意思是 p 是一个指针变量,而非普通的变量。


还有第三种用法,就是取值运算,和定义指针变量是完全两码事,比如:


unsigned char a = 1;

unsigned char b = 2;

unsigned char *p;

p = &a;

b = *p;


这样两步运算完了之后,b 的值就成了 1 了。在这段代码中,&a 表示取 a 这个变量的地址,把这个地址送给 p 之后,再用*p 运算表示的是取指针变量 p 指向的地址的变量的值,又把这个值送给了 b,最终的结果相当于 b=a。同样是*p,放在定义的位置就是定义指针变量,放在执行代码中就是取值运算。



这两个重要区别,大家可以反复阅读三四遍,把这两个重要区别弄明白,指针的大门就顺利的踏进去一只脚了。至于详细的用法,我们后边用得多了就会慢慢熟悉起来了。

本站资讯文章系编辑转载,转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!
[声明]本站文章版权归原作者所有 内容为作者个人观点 本站只提供参考并不构成任何投资及应用建议。
本站拥有对此声明的最终解释权。
收藏 邀请
上一篇:电容作用
关闭

推荐内容上一条 /1 下一条

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-11 12:51 , Processed in 0.109375 second(s), 28 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

返回顶部