【发布时间】:2012-03-16 16:53:48
【问题描述】:
我在下面提到了三个不同的示例。我不明白为什么 ex1 对 ex2 有相同的输出而对 ex3 有不同的输出,还有为什么 ex2 与 ex3 不一样,我只是在另一行创建!
ex1
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int x=2;
int *y;
y = &x;
printf("value: %d\n", *y);
printf("address: %d\n", y);
return EXIT_SUCCESS;
}
输出
value: 2
address: 2686744
ex2
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int x=2;
int *y = &x;
printf("value: %d\n", *y);
printf("address: %d\n", y);
return EXIT_SUCCESS;
}
输出
value: 2
address: 2686744
ex3
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int x=2;
int *y;
*y = &x;
printf("value: %d\n", *y);
printf("address: %d\n", y);
return EXIT_SUCCESS;
}
输出
value: 2686744
address: 2130567168
当我认为 STAR 必须与 (y) 而不是 (int) 时,我对指针有很大的误解 我用 (int) NOT (y) (^_^) 找出那颗星 现在一切都清楚了...感谢您的所有回答
【问题讨论】:
-
调高你的编译器警告级别,你应该被告知问题...
-
ex3 无效。如果从未设置过
y,则不能使用*y。 -
另外你应该养成在打印指针时使用
%p的习惯,而不是%d。 (但对于像*y这样的整数类型,仍然使用%d。) -
@Oli Charlesworth 我想了解内存级别不是编译器所说的,这对我来说还不够。