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;
}
展开
 我来答
揭凌晴9g
2014-01-20 · TA获得超过102个赞
知道答主
回答量:34
采纳率:0%
帮助的人:33.4万
展开全部
这个是一个典型问题了。从主函数的描述来看,你是想通过f函数改变*p的值然后输出。可是你的函数f对指针p进行赋值的操作不能传到主函数中的指针p中。f中的p是一个局部变量,通过f(p)这一步它只是获得了主函数中p的初值(其实初值也是乱码,你主函数定义p没有赋初值,建议不要这样做),事实上这两个p不是同一个变量。仔细观察会发现你的函数f只是对f中的p进行了赋值操作,并没有对主函数中的p进行操作。所以主函数中的p值没有发生改变。加上你没赋初值(重要),我认为你的系统应该提示的是指针p的值错误。
改的方法可以采用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
展开全部
  1. 要在函数内改变指针指向的对象,函数参数需要时 int** p

  2. 函数内部的临时变量,不能通过指针的返回,因为函数结束,number就销毁了

追问
在f()函数中,number不是已经把地址赋给p了吗。那么在函数结束之后
对于p应该没影响吧?
追答
  1. number会被销毁,p指向的地址无效了

  2. 函数内部无法改变函数外面的p值的,要传递**p

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
panfeng2903
2014-01-20
知道答主
回答量:12
采纳率:0%
帮助的人:3.3万
展开全部
P 只是定义了,没有赋值。 f()函数里面的 p 是形参。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
veket的小号
2014-01-20 · TA获得超过3372个赞
知道大有可为答主
回答量:3762
采纳率:0%
帮助的人:4091万
展开全部
野指针问题 ,警告指针p未初始化、不是未定义
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式