-1

头文件: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

但我得到的输出是 area: 3.728 and perimeter: 0.000 代码编译成功。我究竟做错了什么?

4

3 回答 3

1

您永远不会在 中分配arperi任何值main,因此这些变量并非每个都被分配任何值。将具有相同名称的不同变量分配到其他地方并不重要。(如果这样做,该语言将几乎无法使用。)

于 2021-07-01T19:39:06.340 回答
1

你有正确的想法(传递一个指针),但你以错误的方式使用它。

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

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

#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);
}
于 2021-07-01T19:53:02.160 回答
1

您可以执行以下操作。问题是由于您从未通过引用传递 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);
}
于 2021-07-01T19:57:33.750 回答