【发布时间】:2016-02-08 11:39:33
【问题描述】:
指针变量只是指向内存中的其他变量地址。而指针变量显然在内存中有自己的地址。
但是,此代码为两者提供了相同的内存地址。
int num=10;
int *ptr=#
printf("Address of variable num: %p\n",ptr);
printf("Address of pointer ptr: %d\n",&ptr);
如果同时打印它们,那么它似乎可以按预期工作。
变量num的地址:0028FF3C
指针ptr地址:0028FF38
但如果我一次打印它们,那么它会为两者提供相同的地址。
printf("Address of variable num: %p\n",ptr);
//printf("Address of pointer ptr: %d\n",&ptr);
变量num的地址:0028FF38
//printf("Address of variable num: %p\n",ptr);
printf("Address of pointer ptr: %d\n",&ptr);
指针ptr地址:0028FF38
我在 windows 7 机器上使用 mingw 编译器。
【问题讨论】:
-
编译器优化在起作用?
-
这可能是因为编译器看到您没有使用该变量并对其进行优化。您可以通过查看生成的汇编代码(gcc -S)来检查
-
有点迂腐:“指针变量只指向内存中的其他对象”更准确。指针指向的对象不需要有任何变量。