C语言中取值符(*)与取地址符()
在刚开始接触的时候,我完全不怎么懂这两个运算符如何去用它,什么时候用,什么时候不用,我就只知道它的一些具体概念,并不懂如何去运用这两个运算符,经过几天的学习后,才懂的怎么去用这两个运算符。
(1)& 运算符 :用于取一个对象的地址
(2)* 运算符:作用于指针时表示访问指针所指向的对象
如下图:
它运行结果为:
a20
&a0093F968
b0093F968
*b20
这个时候,看结果我们就会发现为什么&a与b为啥不一样的。
原因:
变量a 本质上代表一个存储单元。
处理器通过该存储单元的地址来进行访问到该存储单元中的数据。
因此a本来代表两个值:存储单元的地址和储单元中的数据。
C语言中a表示存储单元中的数据,&a表示存储单元的地址。
如下图:我们可以发现a本身值是20,但是a在内存中的地址值为0093F968,也就是&a,我们将&a赋给b,这时候我们就只是将地址值赋给b并没有将值赋给b,这时候存储单元的地址值拿到了,我们再通过存储单元的地址值来查找相关的存储单元中的数据。(要求对应的存储单元中存储的是另一个存储单元的地址)
那我们这时候该如何去理解a、&a、a:
1.理解它们的根本的含义
a:表示对应的存储单元中的数据。
&a:表示对应的存储单元的地址。
a:表示要求a对应的存储单元中的数据一定是另一个存储单元的地址。
这样,a才能表示另一个存储单元中的数据。
2.根据声明的数据类型来判断a存储的是存储单元的数据值,还是地址值
当我们声明a的类型为int数据类型时,a存储的则是一个整数数值,通过a可以访问(读取或修改)这个数值。
当我们声明a的类型为int 数据类型时,a存储的是一个存储单元的地址,而该存储单元中的数据是一个整数数值;通过a我们可以访问(读取或修改)这个数值。
当我们声明a的类型是int数据类型时,a中存储的是一个存储单元的地址,而该存储单元中存储的数据是另外一个存储单元的地址,另外这个存储单元中存储的是一个整数数值;通过a我们可以访问(读取或修改)这个数值。
需要注意的是,我们的指针只能指向某种特定类型的对象,也就是说,每个指针都必须指向某种特定的数据类型,除了void类型的指针。
“” 有三个作用:
1.乘法
2.定义指针变量
3.取得指针所指向的内存中存储单元的数据值,当指针指向另一个内存中存储单元的地址时,那就是另一个的内存中存储单元的数据值。
C语言中取值符(*)与取地址符(&)的区别:
(1)两者根本意义不同。是指针的意思,而&是取地址的意思,这两个相辅相成。
(2)语言规则不同,变量类型加就是一个指向该变量类型的指针,通俗点说,指针就是可以通过地址修改和获取该变量的值,而&符号只是获取该变量的地址!
(3)取地址符&,对任意变量都可以进行取地址操作;*是取指针目标运算符,其后跟随的必须是指针类变量。
注意的是:&后只能跟变量,不能跟常量,因为常量是一个立即数,它不是个容器,所以没有地址。
如下图:
“&”和“ * ”这两个运算符优先级别是相同,按从右向左的方向结合。因此“&a”先进行“ * ”运算,变量a再进行“&”运算,“&a”取变量a存储单元中的地址。“&a”先进行“&”运算,“&a”就是取变量a的地址,然后执行运算,“&a”就是取变量a存储单元中所在地址的值,实际就是变量a。
综上,&是取变量或指针自身的地址;*是取指针中指向地址内的数据;什么都不加,就是取该变量或指针中当前存储的数据。
C语言中取值符(*)与取地址符()相关推荐
- Session存值取值问题及取不到值的问题
Session存值取值问题及取不到值的问题 一.存值(相当于map) request.getSession().setAttribute("key", value); 二.取值 r ...
- sql-case when 条件1 then 取值1 when 条件2 then 取值2 else 取值3 end
遇到 XXX情况 就 XXX 遇不到就 XXX 结束 case when -- then -- else -- end 例如一个3条件取值的字段: case when 条件1 then 取值1 whe ...
- jquery radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中
例:将多个选中的checkbox的值组装成一个字符串 <script type=text/javascript> function addMem(){ //var followers = ...
- jquery radio取值,checkbox取值,select取值,radio选中,
jquery radio取值,checkbox取值,select取值,radio选中, var item = $('input[@name=items][@checked]').val(); 获取se ...
- c语言二进制负数的除法,C语言中负数除法与右移取整问题
今天碰到了负数除法与右移的替代问题,借机研究一下C语言中负数除法的问题.此处只讨论整数除2的幂次方的情况,并取-7~-5除以4为例,不讨论一般除法的移位优化. 1. 负数右移 对于有符号整数, ...
- thymeleaf 获取yml中的值_Thymeleaf前后端传值 页面取值与js取值
目的: 后端通过Model传值到前端 页面通过Model取值显示 js通过Model取值作为变量使用 1.后台Controller @GetMapping("/message") ...
- asin c语言中 返回值范围_大学C语言考试易错知识点总结
作者:cggwz 来源:https://blog.csdn.net/cggwz/article/details/103740713?utm_medium=distribute.pc_relevant. ...
- php兴趣爱好复选框如何取值,php checkbox 取值详细说明
php checkbox 取值详细说明 发布于 2014-12-12 18:18:58 | 176 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext ...
- c语言中初始值的作用,初始C语言学习
一.我的第一个C语言程序 #include int main() { printf("Hello C语言!\n"); printf("Hello Word!\n" ...
- c语言中的值传递和地址传递参数,c语言值传递,地址传递,引用传递
c语言值传递,地址传递,引用传递 总结:对于函数来说,值传递就是一个人来了,给你一些数 据,你对数据处理.地址传递就是你通过地址找到一个人,然后直接对这个人处理.而引用传递就是你要直接对一个人进行处 ...
最新文章
- 复解析蕴含不可延拓性
- Spring 定时器
- 左神算法:环形单链表的约瑟夫问题(Java版)
- android搭建https,android 搭建https Server(示例代码)
- (转)NSIS使用心得
- DM8168 TILER(3)
- Android 数据库综述(一) 数据库片的升级与数据的迁移操作
- 《C++编程风格(修订版)》——3.2 继承作用域准则
- 如何脱离tutorial使用igllib
- SqlTransaction事务和Response.Redirect
- spec.fne病毒
- Spring的IOC和AOP原理及其使用
- 彩信文件服务器,彩信服务器怎么设置
- 遥感方向SCI期刊整理
- Android java.lang.NoSuchMethodError: No virtual method ;or its super classes (declaration of
- 钉钉、企业微信平台发送工资条程序--燕春科技工资条管理系统2.0
- Spring Boot当中获取request的三种方式
- 合肥市专精特新中小企业申报汇总,申报奖励、认定条件、材料流程时间
- 蓝宝石超频软件测试,帧数提高60% 蓝宝石黑科技TRiXX Boost
- 【ZOJ - 2116】Christopher's Christmas Letter(Lucas)