
C语言 为什么这样用指针,系统会警告没有定义?
#include<stdio.h>voidf(int*p){intnumber=5;p=&number;}intmain(void){int*p;f(p);printf(...
#include <stdio.h>
void f(int *p)
{
int number=5;
p=&number;
}
int main(void)
{
int *p;
f(p);
printf("%d",*p);
return 0;
} 展开
void f(int *p)
{
int number=5;
p=&number;
}
int main(void)
{
int *p;
f(p);
printf("%d",*p);
return 0;
} 展开
4个回答
展开全部
这个是一个典型问题了。从主函数的描述来看,你是想通过f函数改变*p的值然后输出。可是你的函数f对指针p进行赋值的操作不能传到主函数中的指针p中。f中的p是一个局部变量,通过f(p)这一步它只是获得了主函数中p的初值(其实初值也是乱码,你主函数定义p没有赋初值,建议不要这样做),事实上这两个p不是同一个变量。仔细观察会发现你的函数f只是对f中的p进行了赋值操作,并没有对主函数中的p进行操作。所以主函数中的p值没有发生改变。加上你没赋初值(重要),我认为你的系统应该提示的是指针p的值错误。
改的方法可以采用return的方式,或者传递参数的时候使用2级指针进行地址操作都是可以的。先说个大概方法,不明白还可以问我。
改的方法可以采用return的方式,或者传递参数的时候使用2级指针进行地址操作都是可以的。先说个大概方法,不明白还可以问我。
追问
这是程序是我,看书的时候遇到的,具体解决的方法,我已经知道了
编译器提示warning C4700: local variable 'p' used without having been initialized
我现在能否认定,在C语言中(我知道JAVA没有初始化也能调用函数的)在传递给形参前,
是否必须得初始化(赋值)?
追答
关于指针,定义的时候int *p = &a(假设a是整型变量),int *p = NULL都是可以的。初始化是一种良好习惯。另外,并不是传递给形参前必须初始化,我认为,你只要定义一个指针就应该初始化。无论在主函数或子函数中。否则指针指向一个未知的地方,如楼上说的是野指针,操作野指针是很容易导致出错的。顺带提一句,不知道你是不是会java来学C的 指针初始化不要让它指向0。指0的指针甚至比野指针更危险……因为这个0是整个内存地址的0x00000000,是内存基址,可能存放的是一些机器指令什么的。(有的地方说可以指0,0和NULL等价,但是我个人不推荐这样用指针。)
2014-01-20
展开全部
要在函数内改变指针指向的对象,函数参数需要时 int** p
函数内部的临时变量,不能通过指针的返回,因为函数结束,number就销毁了
追问
在f()函数中,number不是已经把地址赋给p了吗。那么在函数结束之后
对于p应该没影响吧?
追答
number会被销毁,p指向的地址无效了
函数内部无法改变函数外面的p值的,要传递**p
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
P 只是定义了,没有赋值。 f()函数里面的 p 是形参。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
野指针问题 ,警告指针p未初始化、不是未定义
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询