在C++中增加char指针

zal*_*hya 5 c++ pointers char

为什么这个节目,

char *s, *p, c;

s = "abc";

printf(" Element 1 pointed to by S is '%c'\n", *s);
printf(" Element 2 pointed to by S is '%c'\n", *s+1);
printf(" Element 3 pointed to by S is '%c'\n", *s+2);
printf(" Element 4 pointed to by S is '%c'\n", *s+3);
printf(" Element 5 pointed to by S is '%c'\n", s[3]);
printf(" Element 4 pointed to by S is '%c'\n", *s+4);
Run Code Online (Sandbox Code Playgroud)

给出以下结果?

 Element 1 pointed to by S is 'a'
 Element 2 pointed to by S is 'b'
 Element 3 pointed to by S is 'c'
 Element 4 pointed to by S is 'd'
 Element 5 pointed to by S is ' '
 Element 4 pointed to by S is 'e'
Run Code Online (Sandbox Code Playgroud)

编译器是如何继续序列的?为什么s[3]返回一个空值?

Jos*_*eld 9

它没有继续序列.您正在进行*s+3哪些第一次取消引用s以向您char提供有价值的内容'a',然后您将添加该char值.添加3 'a'可以获得'd'(至少在执行字符集中)的值.

如果将它们更改为*(s+1)等等,您将获得预期的未定义行为.

s[3] 访问字符串的最后一个元素,即空字符.

  • 一个提示 - "abc"`通常不是一个好的测试字符串 - 从错误的代码中意外地获得预期的结果(或容易混淆的东西)太容易了. (5认同)