#include <stdio.h>
main() {
char *p = "Hello world";
int *q;
p++;
q = (int*) p;
q++;
printf("\n %s\n%s", p, q);
}
这个程序的输出是:
ello world
world
有人可以解释这个程序是如何运作的吗?
答案 0 :(得分:3)
在p++
行中,您将地址p
增加1,因为这是byte
类型的大小,因此p
最终会查看& #34; E&#34;在你的字符串中。
然后您将p
的相同地址分配到q
,因此它也会查看&#34; e&#34;。然后你增加q
,但因为它是一个指向整数(类型int
的指针,在你的机器中长度为4个字节),它会增加4。所以在&#34; e&#34;中添加四个它之前看着它,它最终看着空间角色。
答案 1 :(得分:0)
char *p
最初指向字符串Hello World
的第一个字符。语句p++
将指针p
更改为指向字符串的第二个字符。这解释了在递增后使用指针ello world
打印字符串时得到p
。
将指针p
分配给指针q
时,指针指向int。递增指针q
会将指针更改为指向world
(它指向空格字符)。这是因为int
在您的机器中长度为4个字节,并且将指针递增到int,将指针内容增加4个字节。因此,当您使用指针q
打印字符串时,它会打印world
。
答案 2 :(得分:0)
这是因为你在存储字符串(p ++和q ++)之后增加了指针变量。在你的printf语句中,你正在打印整个stirng%s而不仅仅是一个字符,这就是为什么它是这样打印的。我希望你能得到答案!