简单c++指针代码,求错误原因

来源:百度知道 编辑:UC知道 时间:2024/09/23 11:15:28
int foobar( int *pi ) {
*pi = 1024;
return *pi;
}
int main() {
int *pi2 = 0;
int ival = foobar( pi2 );
return 0;
}

代码如上,运行起来会出现错误。但是我找不出为什么会出错。
错误在指针pi2上吗?

指针没有指向需要的自由存储地址
是野指针!
int *pi2 = 0; //pi2==0表示不指向任何地方

故*p2不能赋值!

改:
int foobar( int *pi ) {
*pi = 1024;
return *pi;
}
int main() {
int *pi2 = new int;
int ival = foobar( pi2 );
return 0;
}

指针的指针...
int foobar( int *pi )传入的是PI的引用,然后你让PI所指的地方赋值,相当于:
**PI=1024.
而*PI=0,能不错吗?

因为你的内存地址0并不是系统所允许的程序所能读取到的内存位置,因此会出错。 LS说的有点问题,0是可以赋给指针的,表示NULL空指针。

您好
int *pi2 = 0; 把后面的=0去掉~

指针只能赋地址,怎么能赋一个实数呢~

int *pi2 = 0这个不对,正如LS所说,指针只能赋地址,不能赋一个实数,但是如果把0去掉的话,那个指针会变为野指针,会带来不可以预计的后果,所以必须使用指针必须初始化。