我有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;
}
我对此有一些疑问!如果我跳过指针声明/初始化
pt = dv(x,y);
我写信 printf("div是%f", *dv(x,y((;
它正常播放!但为什么?我的错误在哪里?
在您的情况下, float d
定义了具有自动存储的本地变量,因此生命周期以函数的返回结束。
您需要一个在整个用法中保持活力的变量,请尝试更改变量定义以使其使其静态存储(整个程序中具有寿命(,例如
static float d;
然后,返回的指针也将在呼叫者中有效。
也就是说,您的类型不匹配
printf("The div is %f", pt);
应该是
printf("The div is %f", *pt);
您试图打印float
,而不是float *
。
您在两种情况下都有不确定的行为。
pt = dv(x,y);
或
printf("The div is %f", *dv(x,y));
当您返回本地变量的地址时,该地址将在控制函数结束时消失。
当它很简单时不要使其变得复杂:
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;
}
您根本不需要指针。
还请阅读以下内容:如何使用指针从其他函数访问局部变量?