我不明白为什么最后一个代码块生成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");
}

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");
}

最佳答案

1819043176是以十六进制表示的6C6C6568,它以字节68、65、6c、6c的形式存储在一个小型的endian机器上。这是“你好世界”的前四个字符。等等。
通常,您不应该在C中执行这些操作,结果是未定义的或依赖于实现的。
如果你仍然想在内存中窥视一下,那么最好以更系统的方式进行,例如编写一个小实用程序来进行十六进制转储。

关于c - C编程指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1541992/

10-12 02:58