【发布时间】:2015-04-01 18:39:14
【问题描述】:
请看下面的代码sn -p -
int main(){
int *i_ptr = 5;
printf("%d", *i_ptr);
return 0;
}
这里我试图声明和初始化一个指针变量i_ptr。它在编译正常时给了我以下警告 -
警告:初始化使指针从整数而不进行强制转换 [默认启用]
但是当我要执行代码时,它给了我以下错误 -
分段错误(核心转储)
我知道这样做的正确方法 -
int n = 5;
int *ptr = &n;
现在我有一些问题 -
1.虽然第一个代码在执行时失败,为什么它没有给出编译错误,而不是警告?
2.我们可以像这样初始化和声明指针变量吗 -
int n = 5 // both declaration and initialization of int type variable n
提前致谢。
【问题讨论】:
-
int *i_ptr = 5表示地址,而不是地址的内容,是 5。它不会报错,因为 5 是有效地址。 -
"我们能不能像这样初始化和声明指针变量-" - 是的,你已经知道了:
int *ptr = &n; -
你可能想要的是
int *i_ptr = new int(5); -
这不应该在 C++ 中编译,句号。
-
@immibis,这意味着我们也可以写 int
*ptr = &5?