C语言 Pointer and printf()



我有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;
}

您根本不需要指针。

还请阅读以下内容:如何使用指针从其他函数访问局部变量?

最新更新