为什么我使用 c 函数中的指针没有得到该程序所需的输出?

Why am I not getting the desired output for this program using pointers in functions in c?

头文件:circlehead.h

#include <stdio.h>
void circle_Data(float *r);
#define PI 3.14f

C 文件 1: circle.c

#include "circlehead.h"
void circle_Data(float *r)
{
    float ar=0,peri=0;
    ar= PI * (*r) * (*r);
    peri=2 * PI * (*r);
}

主要功能 circle_main.c

#include<stdio.h>
#include "circlehead.h"
int main()
{
    float r=5.24;
float  ar, peri;
    
    circle_Data(&r);
    printf("Area is %f", ar);
    printf("Perimeter is %f", peri);
}


我已将这些文件链接到一个可执行文件中:

gcc -c circle.c
gcc -c circle_main.c
gcc -o x_exe circle.o circle_main.o 
./x_exe

但我得到的输出是面积:3.728 和周长:0.000 代码编译成功。我做错了什么?

您永远不会为 arperi 分配 main 中的任何值,因此不会为这些变量分配任何值。具有相同名称的不同变量在别处分配并不重要。 (如果这样做,该语言将几乎无法使用。)

你的想法是对的(传递一个指针),但是你用错了。

问题是你传递了一个指向不会改变的变量的指针,并且没有传递指向你改变的变量的指针 需要更改,由 circle_Data()。这个版本应该按照你想要的方式运行。 main()arperi 的值被 circle_Data() 修改,然后可以打印正确的值。

请注意,circle_Data() 获取 rcopy,它可以修改,但不会更改 r 的值在 main()。这是一个完全独立的变量,就像 arperi 在您的第一个版本中一样。

#include "circlehead.h"
void circle_Data(float r, float* ar, float* peri )
{
    *ar= PI * r * r;
    *peri=2 * PI * r;
}


#include<stdio.h>
#include "circlehead.h"
int main()
{
    float r=5.24;
    float ar, peri;
    
    circle_Data(r, &ar, &peri);
    printf("Area is %f", ar);
    printf("Perimeter is %f", peri);
}

您可以执行如下操作。问题是由于您从不通过引用传递 ar 或 peri。所以你的代码不会改变它们。

主要

#include<stdio.h>
#include "circlehead.h"


int main()
{
  float r = 5.24;
  float ar = 0;
  float peri = 0;
    
    circle_Data(r, ar, peri);
    printf("Area is %f", ar);
    printf("Perimeter is %f", peri);

    return 0;
}

页眉

#include <stdio.h>
void circle_Data(float r, float &ar, float &peri);
#define PI 3.14f

正文

#include "circlehead.h"
void circle_Data(float r, float &ar, float &peri)
{
    ar = PI * (r) * (r);
    peri = 2 * PI * (r);
}