我一直在做下面的作业来解释3条语句中发生了什么,但我搞不清楚。
cout << ("hello" + 1); // ello
cout << (*"hello") + 1; // 105
cout << (*("hello" + 1)); // e
- 为什么数字2是数字而不是字符
- 第一个字符仍然为零吗?(结束字符串)
-
*"hello"
给出字符串的第一个字符'h'
,类型为char
,ASCII值为104。整数提升规则意味着,当将char
和int
相加时,char
转换为int
,得到类型为int
的结果。输出一个int
会得到一个数值。 -
是的。字符串文字是一个以零字符结尾的数组。在其地址中添加一个会产生一个指向数组第二个字符的指针;数组的其余部分没有变化,因此在末尾仍然包含零。
cout << ("hello" + 1); // ello
您正在将const char[]
递增1,因此您打印除第一个字符之外的所有字符(直到达到空字符
cout << (*"hello") + 1; // 105
您在此处取消引用const char[]
。第一个字符是h,ascii码为104
。加一个就得到105
。
cout << (*("hello" + 1)); // e
和以前一样,您取消引用const char[]
,但这次您先递增一。
"hello"是const char *
。
为什么2是数字->*"hello"将是基地址的值,即h(104)的ascii值,所以104+1=105
是的,您刚才指向的是
e
,而不是h
。