打印指针的取消引用值时出现问题

Problem printing the derefrenced value of a pointer

我正在尝试了解指针的操作。

对于以下代码:

void main () {
    int x = 1;
    int y = 2;
    int z = 3;
    
    int *p = &x;
    int *q = &y;
    int *r = &z;

    //print  with labels the values of x, y, z, p, q, r, *p, *q, *r
    printf("x is: %d\n%y is: %d\nz is: %d\n\n",x,y,z);    
    printf("p is: %d\n%q is: %d\nr is: %d\n\n", p, q, r); 
    printf("*p is: %d\n%**q is: %d\n*r is: %d\n\n", *p, *q, *r); 
}

使用gcc编译器的结果是:

行的预期结果:

是:

x is: 1
y is: 2
z is: 3

p is: 6422288
q is: 6422284
r is: 6422280

*p is: 00000001
*q is: 00000003
*r is: 76036FED

根据我的理解,最后三行不应该出现什么,它们应该给出与第一个原因相同的值,这个结果背后是否有原因,或者它是否正确但我遗漏了什么?

三个想法:

  1. printf("p is: %d\n%q is: %d\nr is: %d\n\n", p, q, r); 无效。您需要使用 %p 打印指针。

  2. 您所有的 printf 语句中的百分比字符太多。

  3. 我同意你的主要观点。假设您删除了多余的百分比字符,您应该会看到 *p is 1, *q is 2, *r is 3.

https://repl.it/repls/OpenAngelicControlflowgraph#main.c