繁体   English   中英

在C ++中增加char指针

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM