Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 指针和printf()_C_Function_Pointers - Fatal编程技术网

C 指针和printf()

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

我有以下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))


它正常播放!但是为什么呢?我的错在哪里

在这两种情况下,您都有未定义的行为

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