C 指针和printf()
我有以下C代码:C 指针和printf(),c,function,pointers,C,Function,Pointers,我有以下C代码: float *dv(int a, int b); int main() { int x ,y; scanf("%d%d",&x,&y); float *pt; pt = dv(x,y); printf("The div is %f", pt); return 0; } float *dv(int a, int b){ float d; d = (float) a / b; return &d; }
float *dv(int a, int b);
int main() {
int x ,y;
scanf("%d%d",&x,&y);
float *pt;
pt = dv(x,y);
printf("The div is %f", pt);
return 0;
}
float *dv(int a, int b){
float d;
d = (float) a / b;
return &d;
}
我有一些关于它的问题!如果跳过指针声明/初始化
pt = dv(x,y);
我写进
printf(“div为%f”,*dv(x,y))
它正常播放!但是为什么呢?我的错在哪里 在这两种情况下,您都有未定义的行为
pt = dv(x,y);
或
当您返回局部变量的地址时,当控件到达函数末尾时,该地址将消失。在您的情况下,
float d
定义了一个具有自动存储的局部变量,因此生命周期随着函数的返回而结束
您需要一个在整个使用过程中保持活动状态的变量,请尝试更改变量定义以使其成为静态存储(在整个程序中有一个生命周期),如
然后,返回的指针也将在调用方中有效
也就是说,您的类型不匹配
printf("The div is %f", pt);
应该是
printf("The div is %f", *pt);
当您试图打印一个
浮点
,而不是浮点*
时,不要让它变得复杂,因为它可能很简单:
float dv(int a, int b);
int main() {
int x ,y;
scanf("%d%d",&x,&y);
float pt;
pt = dv(x,y);
printf("The div is %f", pt);
return 0;
}
float dv(int a, int b){
float d;
d = (float) a / b;
return d;
}
这里根本不需要指针
也请阅读以下内容:Nop,这两个都不是正常播放!我键入5和6作为整数,得到0.0000000作为输出。您的错误是返回指针。因为您只需要返回一个浮点值,所以只需这样做。您的错误是返回一个指向局部变量的指针,该局部变量的生命周期在您返回调用函数的那一刻逻辑结束。printf很可能在打印参数之前覆盖dv的局部变量。。。
printf("The div is %f", *pt);
float dv(int a, int b);
int main() {
int x ,y;
scanf("%d%d",&x,&y);
float pt;
pt = dv(x,y);
printf("The div is %f", pt);
return 0;
}
float dv(int a, int b){
float d;
d = (float) a / b;
return d;
}