c语言 关于空指针问题

intconvertTime(intdays,int*y,int*w,int*d){if(days<0){return1;}elseif{if(y==NULL&&w==N... int convertTime(int days, int *y, int *w, int *d){
if(days < 0){
return 1;
}else if{
if(y == NULL && w == NULL && d == NULL){
return 1;
}else if{
int a = days%365;
*y = (days - a)/365;
*w = (a - (a%7))/7;
*d = a%7;
return 0;
}
}
}

这里的if(y == NULL && w == NULL && d == NULL)说法对么
for(c = abs(a-b); c<epsilon ; c = abs(a-b);){
a = (a+b)/2;
b = sqrt(a*b);
}
这个循环可以这么用么?

没懂为什么int convertTime(int days, int *y, int *w, int *d)中为何需要用到指针?

为什么不用int convertTime(int days, int y, int w, int d)
展开
 我来答
Arthurzss
推荐于2016-03-07 · TA获得超过1662个赞
知道小有建树答主
回答量:496
采纳率:100%
帮助的人:244万
展开全部
1. if(y == NULL && w == NULL && d == NULL)这个语法上是对的,但是逻辑上不对,应该任何变量为空指针都不能执行,所以改为if(y == NULL || w == NULL || d == NULL)
2. if...else... 的用法问题,else后并不是一定要再加if的。而且if后面一定要有条件。
3. 循环只要是收敛的就可以用,但是要记得初始化
a=a初值;
b=b初值;
epsilon =较小值;
for(c = abs(a-b); c<epsilon ; c = abs(a-b);){
a = (a+b)/2;
b = sqrt(a*b);
}
4. 要修改y,w,d所指向的值,所以要用指针。否则直接用int y,w,d的话只能修改函数内部变量,不能带出函数。(形参和实参的概念)

程序修改如下:
int convertTime(int days, int *y, int *w, int *d){
if(days < 0){
return 1;
}
else if(y == NULL || w == NULL || d == NULL){//去掉多余的if,并修改&&为||
return 1;
}
else{//去掉多余的if
int a = days%365;
*y = days / 365; //可以直接这么写,由于分子分母都是整数,所以这里的除号是做整除
*w = a / 7;
*d = a % 7;
return 0;
}
}
追问
想再问问   我先定义
brother__qiang
2014-10-14 · TA获得超过597个赞
知道小有建树答主
回答量:1346
采纳率:66%
帮助的人:533万
展开全部
对的。
因为从定义int *y, int *w, int *d可以看出y,w,d都是指针,指针是用==NULL来判断的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
留下痕迹的人生
2014-10-14 · TA获得超过513个赞
知道小有建树答主
回答量:305
采纳率:80%
帮助的人:209万
展开全部
这个函数是通过返回值来判断函数是否正常执行
if(y == NULL && w == NULL && d == NULL) 语法上没有任何错误
最好这样写
if((y ==NULL) && (w==NULL) && (d==NULL)) // 这样写的好处就是增加可阅读性,避免出现
运算符优先级的问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
haiyangfenghuo
2014-10-14 · TA获得超过2439个赞
知道大有可为答主
回答量:2388
采纳率:0%
帮助的人:814万
展开全部
这个没有问题,程序的问题出在了else if也要接条件表达式,因为else if也是if,不能直接加{}.
for(c = abs(a-b); c<epsilon ; c = abs(a-b);){
a = (a+b)/2;
b = sqrt(a*b);
}可以用
指针的意思是可以直接对里面的数据进行修改,虽然其地址不变,但是内容可以修改,直接换一下指向就可以了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式