为什么我使用 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
代码编译成功。我做错了什么?
您永远不会为 ar
或 peri
分配 main
中的任何值,因此不会为这些变量分配任何值。具有相同名称的不同变量在别处分配并不重要。 (如果这样做,该语言将几乎无法使用。)
你的想法是对的(传递一个指针),但是你用错了。
问题是你传递了一个指向不会改变的变量的指针,并且没有传递指向你改变的变量的指针 需要更改,由 circle_Data()
。这个版本应该按照你想要的方式运行。 main()
的 ar
和 peri
的值被 circle_Data()
修改,然后可以打印正确的值。
请注意,circle_Data()
获取 r
的 copy,它可以修改,但不会更改 r
的值在 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);
}
您可以执行如下操作。问题是由于您从不通过引用传递 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);
}
头文件: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 代码编译成功。我做错了什么?
您永远不会为 ar
或 peri
分配 main
中的任何值,因此不会为这些变量分配任何值。具有相同名称的不同变量在别处分配并不重要。 (如果这样做,该语言将几乎无法使用。)
你的想法是对的(传递一个指针),但是你用错了。
问题是你传递了一个指向不会改变的变量的指针,并且没有传递指向你改变的变量的指针 需要更改,由 circle_Data()
。这个版本应该按照你想要的方式运行。 main()
的 ar
和 peri
的值被 circle_Data()
修改,然后可以打印正确的值。
请注意,circle_Data()
获取 r
的 copy,它可以修改,但不会更改 r
的值在 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);
}
您可以执行如下操作。问题是由于您从不通过引用传递 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);
}