pa = &(a+1)这一句不对.

a是一个变量,a+1是一个数值,无法再通过在前面加“&”获得一个地址.有的编译器可以用&(int )(a+1)的方式强制获得一个地址,但结果不确定,属于极危险的操作.

再问: 我对内存不太懂,还有个问题。a+1是个数值,可是在计算机中它不也应该存放吗?它存放的地方没地址吗?

再答: a是有地址的,但a+1的值,在编译的时候还不存在,只有在代码执行时才会计算出结果,并且如果a+1的计算结果没有通过形如 b=a+1这样的语句储存到变量b的话,只是临时存放在寄存器中(其实前提还是要有xxx=a+1这样的语句,a+1的结果才有机会放进寄存器)。既然只是临时放入寄存器,就无法通过在前面加&来获取地址了。 如果没有特殊目的,把变量加上一个常数再赋值给一个指针,这种情况极少,而且这种语句即危险又导致代码可读性很差,不提倡采用这种方法和这种思路编程。

再问: 灰常感谢您的回答,您说得很清楚。你真是厉害,希望以后可以多多向您请教!

再答: 看这段代码的反汇编,你就明白为什么a+1没有地址了。 b=a+1; //执行b=a+1时 004113D2 mov eax,dword ptr [a] //先把a的值放进寄存器exa(ptr [a]是指向变量a的地址) 004113D5 add eax,1 //然后将eax的值加1(这个时间eax的值就是a+1的值) 004113D8 mov dword ptr [b],eax //然后将eax的值(或者说是a+1的值)转移给变量b //整个过程中a+1的结果只在寄存器里存在过,然后就转移给b int main() { int a=2; int b=0; int *p; p=&b; b=a+1; return 0; } int main() { 004113A0 push ebp 004113A1 mov ebp,esp 004113A3 sub esp,0E4h 004113A9 push ebx 004113AA push esi 004113AB push edi 004113AC lea edi,[ebp-0E4h] 004113B2 mov ecx,39h 004113B7 mov eax,0CCCCCCCCh 004113BC rep stos dword ptr es:[edi] int a=2; 004113BE mov dword ptr [a],2 int b=0; 004113C5 mov dword ptr [b],0 int *p; p=&b; 004113CC lea eax,[b] 004113CF mov dword ptr [p],eax b=a+1; 004113D2 mov eax,dword ptr [a] 004113D5 add eax,1 004113D8 mov dword ptr [b],eax return 0; 004113DB xor eax,eax }

c语言 int a 5,在C语言中,有如下的写法:int a = 5; int *pa; pa = (a + 1);相关推荐

  1. c语言数据类型 占字节最少,C语言中int型是所占字节最短的数据类型。

    C语言中int型是所占字节最短的数据类型. 更多相关问题 [单选,A1型题] 满而不痛者,此为痞,载于() [单选,A4型题,A3/A4型题] 钱某,男,16岁,近日因饮酒饱食后出现胃脘胀满疼痛,嗳腐 ...

  2. c语言int16位数据范围,c语言中int取值范围为16位指的是什么16位

    1.c语言中int取值范围为16位指的是什么16位 计算机用二进制表示数值,最小单位就是位(bit),可以储存0或1,16位就是有16个储存0或1的位,其中左边第一位是符号位,0代表+ .1代表-. ...

  3. c语言char有什么作用,C语言中char*和char[]用法区别分析

    本文实例分析了C语言中char* 和 char []的区别.分享给大家供大家参考之用.具体分析如下: 一般来说,很多人会觉得这两个定义效果一样,其实差别很大.以下是个人的一些看法,有不正确的地方望指正 ...

  4. c语言char str什意思,C语言中,charstr的str到底表示什么?

    问题:C语言中,char str的 str到底表示什么? 描述: #include int main() { #第一处 char *pstr = "abcdef"; printf( ...

  5. c语言中变量加1,c语言中,指针加1的情况.指针变量详细介绍

    指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 要搞清一个指针需要搞清指针的四方面的内容: 指针的类型, 指针所指向的 类型, 指针的值或者叫指针所指向的内存区, 还有指针本身所占 ...

  6. c语言if语句知识点总结,c语言中if语句知识点总结.docx

    c语言中if语句知识点总结.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3. ...

  7. c语言输入10个数从小,C语言中,从键盘输入10个数,从小到大排列输出,怎

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:C语言中,从键盘输入10个数,从小到大排列输出,怎么写啊,最好注回答:#includestdio.h void swap(int * ...

  8. c语言strlen用法,如何使用c语言中的strlen()函数

    c语言中strlen()函数的用法是:[strlen(const char *str)].该函数用于计算字符串的长度,直到空结束字符,但不包括结束字符,并返回字符串的长度. 函数介绍: (推荐教程:c ...

  9. c语言while break用法举例,c语言中continue和break的用法

    目前,随着计算机在人们生活和工作中的普及,其教学研究地位也在逐渐提升.C语言是一种计算机程序设计语言,其具有高级语言和汇编语言的特点.下面小编就跟你们详细介绍下c语言中continue和break的用 ...

最新文章

  1. jmeter的两种参数化方法
  2. udhcp源码详解(五) 之DHCP包--options字段
  3. 三十六、深入Vue.js组件Component(上篇)
  4. 两栈共享存储空间算法
  5. ***的基础知识总结
  6. HTML5编写船上航行,单体半滑行穿浪船船型与静水航行性能
  7. HDU4857 逃生【拓扑排序】
  8. Nginx源码阅读 --- nginx evnet事件接受请求时,函数执行过程
  9. (转)1.43亿用户信息泄露案后 美国征信机构CEO离职
  10. 安装mosek并配置到matlab
  11. 3D MAX卸载“windows找不到文件”的解决办法
  12. 永久关闭wps热点新闻的办法
  13. Tomb Raider(暴力模拟)
  14. MySQL数据库数据传到Excel
  15. Anaconda3最新版2022版的下载安装配置及使用教程(建议收藏,持续更新..)
  16. 如何把C盘下用户的中文用户名改成英文用户名
  17. Java中间件之介绍
  18. iOS银联支付(最新)
  19. 计算机(本科)课程安排表
  20. [图文详解]什么是一致性哈希算法,墙裂推荐收藏

热门文章

  1. (转)Vue-初步了解vue-router的三要素:路由map 、路由视图、路由导航
  2. Selenium---环境配置
  3. rootfs文件系统的制作(二)
  4. 【个人笔记】OpenCV4 C++ 图像处理与视频分析 11课
  5. fastdfs 报错 err: TrackerTask RecvHeader recv resp status 28 != 0
  6. 培华学院2012届计算机专业多少人,西安培华学院学子在中国大学生计算机设计大赛中取得多个国奖...
  7. Glib2基本api调用流程(十五)
  8. Linux修改的文件“修改时间”
  9. 安装双系统:Win7/Win10 + Ubuntu(亲测可用)
  10. Vue之安装Google开发插件