为什么这个节目,
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]
返回一个空值?
它没有继续序列.您正在进行*s+3
哪些第一次取消引用s
以向您char
提供有价值的内容'a'
,然后您将添加该char
值.添加3 'a'
可以获得'd'
(至少在执行字符集中)的值.
如果将它们更改为*(s+1)
等等,您将获得预期的未定义行为.
s[3]
访问字符串的最后一个元素,即空字符.