解释这段代码关于指针的输出

时间:2016-04-18 06:04:55

标签: c pointers

#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

有人可以解释这个程序是如何运作的吗?

3 个答案:

答案 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而不仅仅是一个字符,这就是为什么它是这样打印的。我希望你能得到答案!