long x='abcd'+1 ,什么意思,对,就是单引号!

阿霖 2011-12-05 01:59:37
long x='abcd'+1
是什么意思,怎么储存的?
如果是
long x='abcde'+1
或者
long x='abc'+1
又是什么情况呢?
...全文
261 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wtbike 2011-12-08
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zhao4zhong1 的回复:]

引用 9 楼 wtbike 的回复:
引用 8 楼 zhao4zhong1 的回复:

VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾……
[/Quote]

谢谢!
赵4老师 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wtbike 的回复:]
引用 8 楼 zhao4zhong1 的回复:

VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
……
[/Quote]
;小端内存
long x = 'abc' ;
004417C7 mov dword ptr [ebp-70h],616263h ;在ebp-70h开始的地址处依次填写63 62 61 00四个字节
long y = 'abcd' ;
004417CE mov dword ptr [ebp-7Ch],61626364h ;在ebp-7Ch开始的地址处依次填写64 63 62 61四个字节

pathuang68 2011-12-05
  • 打赏
  • 举报
回复
印象中,这个是undefined bahavior。总之,最好别这么写。
阿霖 2011-12-05
  • 打赏
  • 举报
回复
试了一下
int main()
{
const long msg_FilterGraphError = 'avct' + 1;
}



watch的值是 msg_FilterGraphError 0x61766375

大家懂的 结贴
wtbike 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhao4zhong1 的回复:]

VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
[/Quote]

long x = 'abc' ;
004417C7 mov dword ptr [ebp-70h],616263h
long y = 'abcd' ;
004417CE mov dword ptr [ebp-7Ch],61626364h

这又是什么意思呢?后面“616263h”倒是看到了
赵4老师 2011-12-05
  • 打赏
  • 举报
回复
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
slient_wj 2011-12-05
  • 打赏
  • 举报
回复
还有这种用法啊,长见识了
huofen2005 2011-12-05
  • 打赏
  • 举报
回复
long x='abcd'+1
应该等效于
long x='a'+1 或者 long x='d'+1 吧?

1.单引号是表示字符的,但C/C++编译器貌似都支持往里塞个串,不知道为啥?
不过编译结果还是字符,取头还是取尾,就看编译器开发者的性取向了!
2.至于字符和整数相加,这个基础语法里面都有讲,不需要多罗嗦了吧!
qscool1987 2011-12-05
  • 打赏
  • 举报
回复

但疼,先把'abcd'四个字节里的类容转换成2进制数,然后转换成10进制再加1
如果:
sizeof('abcd');
结果为4
char ch = 'abcd';
结果ch为d,这说明'abcd'占4个字节,将低8字节d复制给了ch,其他的被cut了
qwer_boo 2011-12-05
  • 打赏
  • 举报
回复
将'abcd'按内存序列转化为整型
we_sky2008 2011-12-05
  • 打赏
  • 举报
回复
结果和具体编译器的实现相关,参考C99标准:
An integer character constant has type int.The value of an integer character constant
containing a single character that maps to a single-byte execution character is the
numerical value of the representation of the mapped character interpreted as an integer.
The value of an integer character constant containing more than one character (e.g.,
'ab'), or containing a character or escape sequence that does not map to a single-byte
execution character,is implementation-defined.
majia2011 2011-12-05
  • 打赏
  • 举报
回复
呵呵呵,我常这么用,你调试一下,看下内存就知道了。

那是一个ulong,为了提高效率的写法
Enter空格 2011-12-05
  • 打赏
  • 举报
回复
能编译过么?
如果能编译过当话,long x应该是被赋值成字符串'abcd'中a开始的4个字节的内容当值+1.

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧