( "hello" + 1) VS (* "hello" ) + 1 VS (*( "hello" + 1)) 之间的区别



我一直在做下面的作业来解释3条语句中发生了什么,但我搞不清楚。

cout << ("hello" + 1);    // ello
cout << (*"hello") + 1;   // 105
cout << (*("hello" + 1)); // e
  1. 为什么数字2是数字而不是字符
  2. 第一个字符仍然为零吗?(结束字符串)
  1. *"hello"给出字符串的第一个字符'h',类型为char,ASCII值为104。整数提升规则意味着,当将charint相加时,char转换为int,得到类型为int的结果。输出一个int会得到一个数值。

  2. 是的。字符串文字是一个以零字符结尾的数组。在其地址中添加一个会产生一个指向数组第二个字符的指针;数组的其余部分没有变化,因此在末尾仍然包含零。

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 *

  1. 为什么2是数字->*"hello"将是基地址的值,即h(104)的ascii值,所以104+1=105

  2. 是的,您刚才指向的是e,而不是h

相关内容

  • 没有找到相关文章

最新更新