如何在C中获取指针数组的元素?



我正在尝试制作一个指针数组,在我的情况下可以指向三个元素。我想在运行时获取元素并想访问每个元素,但我不能。这是源代码。

#include<stdio.h>
main(){
int i;
float *coefficient[3];
for(i=0;i<=2;i++){
scanf("%f",coefficient[i]);
}
for(i=0;i<=2;i++){
printf("%fn",*coefficient[i]);
}
}

更改

float *coefficient[3];

float coefficient[3];

因为你需要一个float数组而不是float指针

然后

改变

scanf("%f",coefficient[i]);

scanf("%f",&coefficient[i]);

因为您需要指向浮点数的指针才能读入。另请检查scanf的返回值

因为你有一个浮点数组

printf("%fn",coefficient[i]);

是你所需要的

指针未初始化,因此取消引用它们会导致未定义的行为。您需要为它们分配内存,例如使用malloc().

for(i=0;i<=2;i++){
coefficient[i] = malloc(sizeof *coefficient[i])
scanf("%f",coefficient[i]);
}

打印它们后,您应该使用free()释放内存。

对于根据 C 标准的初学者,不带参数的函数 main 应声明为

int main( void )

您声明了一个包含三个指针的数组,但数组的元素未初始化且具有不确定的值。

因此,在此循环中调用函数scanf

for(i=0;i<=2;i++){
scanf("%f",coefficient[i]);
}

调用未定义的行为。

作为数组元素的指针应指向可以使用指针存储数据的有效内存。

例如,您可以为每个指针动态分配将由相应指针指向的内存

这是一个演示程序。

#include <stdio.h>
#include <stdlib.h>
int main(void) 
{
enum { N = 3 };
float  *coefficient[N];
for ( size_t i = 0; i < N; i++ )
{
coefficient[i] = malloc( sizeof( float ) );
}
for ( size_t i = 0; i < N; i++ )
{
scanf( "%f", coefficient[i] );
}
for ( size_t i = 0; i < N; i++ )
{
printf( "%fn", *coefficient[i] );
}
for ( size_t i = 0; i < N; i++ )
{
free( coefficient[i] );
}
return 0;
}

如果输入

1.1
2.2
3.3

然后输出将如下所示

1.100000
2.200000
3.300000

您可以根据需要格式化输出。

通常,您应该检查malloc和/或scanf的调用是否成功。

最新更新