[英]Incrementing char pointers in C++
为什么这个节目,
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);
给出以下结果?
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'
编译器是如何继续序列的? 为什么s[3]
返回一个空值?
它没有继续序列。 你正在做*s+3
,它首先解引用s
给你一个值为'a'
的char
,然后你添加到那个char
值。 将3添加到'a'
会给出'd'
的值(至少在执行字符集中)。
如果将它们更改为*(s+1)
,依此类推,您将获得预期的未定义行为。
s[3]
访问字符串的最后一个元素,即空字符。
请注意, *s
是一个字符,本质上是一个数字。 添加另一个数字会导致ASCII值更高的字符。 s[3]
为空,因为您只将“abc”分别分配给条目0,1,2。 实际上第三个字符是'\\ 0'字符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.