指针声明顺序重要吗?
我想知道为什么 GS Tselikis 的《C :从理论到实践》练习 8.3 中的代码可以工作,尽管它不应该工作。
int main() {
double *ptr, i;
scanf("%lf", ptr);
printf("Val = %f\n", *ptr);
return 0;
}
然而,变量声明中的一个小变化会导致预期的行为(因为ptr
未初始化)。
int main() {
double i, *ptr;
scanf("%lf", ptr);
printf("Val = %f\n", *ptr);
return 0;
}
我正在使用 Visual Code Studio 和 clang(Apple LLVM 版本 10.0.0 (clang-1000.11.45.5))。有什么想法吗?
I wonder why the code from exercise 8.3 in C : From Theory to Practice by G.S. Tselikis works, although it shouldn't.
int main() {
double *ptr, i;
scanf("%lf", ptr);
printf("Val = %f\n", *ptr);
return 0;
}
However, a small change in the variable declaration leads to the expected behaviour (because ptr
is not initialized).
int main() {
double i, *ptr;
scanf("%lf", ptr);
printf("Val = %f\n", *ptr);
return 0;
}
I am using Visual Code Studio and clang (Apple LLVM version 10.0.0 (clang-1000.11.45.5)). Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这两个程序都有未定义的行为,因为您向
scanf()
传递了无效地址来读取数值:ptr
未初始化。如果您正确地将
ptr
设置为指向i
,两者的行为相同,但第二个程序可以使用初始值设定项更直接地编写:与:
Both programs have undefined behavior because you pass an invalid address to
scanf()
to read the numeric value:ptr
is not initialized.If you properly set
ptr
to point toi
, both will behave the same, but the second program can be written more directly with an initializer:vs: