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) 展开
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) 展开
展开全部
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;
}
}
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;
}
}
追问
想再问问 我先定义
展开全部
对的。
因为从定义int *y, int *w, int *d可以看出y,w,d都是指针,指针是用==NULL来判断的。
因为从定义int *y, int *w, int *d可以看出y,w,d都是指针,指针是用==NULL来判断的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个函数是通过返回值来判断函数是否正常执行
if(y == NULL && w == NULL && d == NULL) 语法上没有任何错误
最好这样写
if((y ==NULL) && (w==NULL) && (d==NULL)) // 这样写的好处就是增加可阅读性,避免出现
运算符优先级的问题
if(y == NULL && w == NULL && d == NULL) 语法上没有任何错误
最好这样写
if((y ==NULL) && (w==NULL) && (d==NULL)) // 这样写的好处就是增加可阅读性,避免出现
运算符优先级的问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个没有问题,程序的问题出在了else if也要接条件表达式,因为else if也是if,不能直接加{}.
for(c = abs(a-b); c<epsilon ; c = abs(a-b);){
a = (a+b)/2;
b = sqrt(a*b);
}可以用
指针的意思是可以直接对里面的数据进行修改,虽然其地址不变,但是内容可以修改,直接换一下指向就可以了。
for(c = abs(a-b); c<epsilon ; c = abs(a-b);){
a = (a+b)/2;
b = sqrt(a*b);
}可以用
指针的意思是可以直接对里面的数据进行修改,虽然其地址不变,但是内容可以修改,直接换一下指向就可以了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询