C 编程指针

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

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。这是“hello world”的前四个字符。等等。

通常你不应该在 C 中做这些事情,结果是未定义的或依赖于实现。

如果您仍然想查看内存,那么最好以更系统的方式进行,例如编写一个小实用程序来进行十六进制转储。

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

相关文章:

c - 在c中,值在函数调用后从函数末尾更改到函数外部

c - LLDB 调试器无法识别在远程机器上编译的可执行符号

calloc 类型转换为指向指针的指针

c - 数组未正确填充

c - 找到最小的 n 个整数

c - C 中使用数组和交换函数时的指针

c++ - 如何防止 cvLoad 失败?

c++ - 程序终止时保证文件删除 (C/C++)

c - 帮我创建这个随机数

c - 删除c程序中的制表符/空格