我正在尝试制作一个指针数组,在我的情况下可以指向三个元素。我想在运行时获取元素并想访问每个元素,但我不能。这是源代码。
#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
的调用是否成功。