【问题标题】:output of the function with the float pointer parameter and input as a address of int variable函数的输出,带有浮点指针参数,输入为 int 变量的地址
【发布时间】:2015-10-13 12:16:46
【问题描述】:

我对 C 语言中的这个主题 pointers 非常陌生。我有一个代码如下。

这段代码的输出是 0.000000 但我不明白为什么会这样?

 void foo(float *);
    int main()
    {
    int i=10,*p=&i;
    foo(&i);
    }

    void foo(float *p)
    {
    printf("%f",*p);

【问题讨论】:

  • 可能是未定义的行为?
  • @MikeCAT:没有“可能”。它未定义的。
  • 您不应该将int* 传递给他们期望的float*
  • 在 IEEE754 32 位浮点数中,0x0000000A 代表 1.4E-44。尝试使用%g 而不是%f
  • 为什么开发人员不断地做明显违法的事情,然后在这里问为什么结果无法解释? “好吧,所以我把车开到了一棵树上,但为什么我骨折了这么多还要住院呢?”

标签: c pointers


【解决方案1】:

首先检查此site 以了解指针行为。

在您的代码中,您声明浮点类型参数但传递整数值。

试试这个:

#include <stdio.h>

void foo(int *p)
    {
    printf("%d",*p);
    }


int main()
{
    int i=10,*p=&i;
    foo(&i);
    return 0;
}

【讨论】:

    【解决方案2】:

    它给出以下警告。

    test.c:6:2: 警告:从不兼容的指针类型传递“foo”的参数 1 [默认启用]

    因为,您将地址传递给 foo 函数,但预期的参数是 float *。 然后将 p 指针定义为整数类型。

    变量 p 不指向 i。 但是在 foo 函数调用中,并没有传递地址。

    所以,它给出警告和 0.0000。

    所以,如下更改您的代码。

      void foo(float *);
        int main()
        {
        flat i=10,*p=&i;   //Change the data type
        foo(&i);
        }
    
        void foo(float *p)
        {
    printf("%f",*p);
    

    }

    现在输出是

    10.0000

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-14
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      • 2012-02-23
      • 2018-06-21
      相关资源
      最近更新 更多