打印指针的取消引用值时出现问题
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
根据我的理解,最后三行不应该出现什么,它们应该给出与第一个原因相同的值,这个结果背后是否有原因,或者它是否正确但我遗漏了什么?
三个想法:
printf("p is: %d\n%q is: %d\nr is: %d\n\n", p, q, r);
无效。您需要使用 %p
打印指针。
您所有的 printf 语句中的百分比字符太多。
我同意你的主要观点。假设您删除了多余的百分比字符,您应该会看到 *p is 1, *q is 2, *r is 3
.
我正在尝试了解指针的操作。
对于以下代码:
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
根据我的理解,最后三行不应该出现什么,它们应该给出与第一个原因相同的值,这个结果背后是否有原因,或者它是否正确但我遗漏了什么?
三个想法:
printf("p is: %d\n%q is: %d\nr is: %d\n\n", p, q, r);
无效。您需要使用%p
打印指针。您所有的 printf 语句中的百分比字符太多。
我同意你的主要观点。假设您删除了多余的百分比字符,您应该会看到
*p is 1, *q is 2, *r is 3
.