gpt4 book ai didi

c - 如何在 C 中通过引用将结构数组传递给函数?

转载 作者:太空宇宙 更新时间:2023-11-04 06:56:50 24 4
gpt4 key购买 nike

此代码与我尝试做的类似,但是我收到错误消息说我正在传递不兼容的类型

 #include <stdio.h>

struct numbers{
int num;
};

void fillArray(struct numbers* a[]);

int main(void)
{
struct numbers array[4];

fillArray(&array);

for(int i = 0; i < 4; i++)
{
printf("%d", array[i].num);
}

}

void fillArray(struct numbers* a[])
{
for(int i = 0; i < 4; i++)
{
a[i]->num = i;
}
}

最佳答案

函数参数

void fillArray(struct numbers* a[]);

调整为

void fillArray(struct numbers ** a);

另一方面,这个调用中的参数类型

fillArray(&array);

struct numbers( * )[4]struct numbers **struct numbers ( * )[4] 类型不兼容。

不需要传递指向数组的指针,因为如果您只传递隐式转换为指向其第一个元素的指针的数组,则数组元素已经间接传递。

所以你需要的是像这样声明和定义函数

void fillArray( struct numbers a[] )
// or
// void fillArray( struct numbers *a )
{
for(int i = 0; i < 4; i++)
{
a[i].num = i;
}
}

并称它为

fillArray( array );

考虑到该函数依赖于魔数(Magic Number) 4。最好将函数定义为可以处理各种元素数量的数组。

所以我会这样定义函数

void fillArray( struct numbers a[], size_t n )
// or
// void fillArray( struct numbers *a, size_t n )
{
for ( size_t i = 0; i < n; i++ )
{
a[i].num = i;
}
}

并称它为

fillArray( array, 4 );

这里展示了整个程序的样子

#include <stdio.h>

struct numbers
{
int num;
};

void fillArray( struct numbers a[], size_t n )
{
for ( size_t i = 0; i < n; i++ )
{
a[i].num = i;
}
}

#define N 4

int main(void)
{
struct numbers array[N];

fillArray( array, N );

for ( size_t i = 0; i < N; i++ )
{
printf( "%d ", array[i].num );
}

putchar( '\n' );

return 0;
}

它的输出是

0 1 2 3 

要使用具有不同数量元素的数组,只需更改宏名称 N 的值即可。因此程序及其功能不依赖于魔数(Magic Number)4

关于c - 如何在 C 中通过引用将结构数组传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43319778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com