C编程指针

use*_*466 0 c

我不明白为什么最后一个代码块生成1819043176 1870078063 6581362 0 1 2 3 4 0 6488159 ...这些数字不是随机的,但为什么这些数字呢?谢谢!

int main(void) {
    int x;
    int y[10];
    int* p;
    char* q;
    int k;
    char* prefix;

    k = 0;
    while (k < 10) {
            y[k] = k;
            k = k + 1;
    }
    x = 42;
    printf("address of y are %d %d %d\n", y, y + 1, y + 9);
    doit(y + 1);

    p = &y[0];
    printf("p is %d\n", p);
    *p = 42;
    p = p + 9;
    printf("p is %d\n", p);
    *p = 17;

    q = "hello world";
    p = "hello world";
    k = 0;
    while (k < 10) {
            printf("%d ", q[k]);
            k = k + 1;
    }
    printf("The end\n");

    k = 0;
    while (k < 10) {
            printf("%d ", p[k]);
            k = k + 1;
    }
    printf("The end\n");
}
Run Code Online (Sandbox Code Playgroud)

DOIT

void doit(int p[9])
{
    char* prefix = "";
    int k = 0;
    printf("p is %d at address %d\n", p, &p);
    while (k < 10)
    {
        printf("%s%d", prefix, *p);
        prefix = ", ";
        k = k + 1;
        p = p + 1;
    }
    printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

sta*_*lue 5

1819043176是十六进制的6C6C6568,在小端机器上存储为字节68,65,6c,6c.这是"你好世界"的前四个字.等等.

通常,您不应该在C中执行这些操作,结果是未定义的或依赖于实现的.

如果你想要在内存中查看,那么最好以更系统的方式进行,例如编写一个小实用程序来执行十六进制转储.