gpt4 book ai didi

c - 发送结构数组时程序崩溃

转载 作者:行者123 更新时间:2023-11-30 14:53:09 25 4
gpt4 key购买 nike

我在尝试解决这个问题时感到头疼。问题是,我试图通过将其地址从 main() 函数发送到其特定函数(在其中初始化它)来初始化 struct array。但当我运行它时,它总是崩溃。但是,程序会一直进行到那边的标志为止!请帮帮我

ps:

错误消息显示:

45 [Warning] passing argument 1 of 'initfunc' from incompatible pointer type [enabled by default]

typedef struct{
int code, year, rentstate;
char type[50];
float price;
}CAR;

void initfunc(CAR *car[]){
int i;

printf("flag ok");
for(i=0;i<50;i++)
{
car[i]->code = 0;
printf("initializing...");
}
getch();
}

int main(int argc, char const *argv[])
{
int opt, a=0;
CAR car[50];

initfunc(car);

最佳答案

CAR *汽车[]表示 CAR 指针数组。

您想要发送 CAR car[] 结构体 CAR 数组。

此外,当您传递CAR数组时,您可以像这样car[i].codecar[i].year访问它> 等等

如果它是 CAR* 而不是 CAR,则您必须像这样访问 code

例如:

CAR *car = malloc( sizeof *car);
...
(*car).code = //..
equivalently

car->code = //...

在你的情况下,代码是

void initfunc(CAR car[]){ // void initfunc(CAR *car)

printf("flag ok");

for(size_t i = 0; i < 50; i++)
{
car[i].code = 0;
printf("initializing...");
}
getch();
}

OP问为什么将数组更改为被调用函数会更改main()中的数组?

由于我们实际上将指针传递给原始数组,因此被调用函数中的更改会修改原始数组。 在 C 中,除了少数特殊情况外,数组引用总是“衰减”为指向第一个数组的指针数组的元素。

C中,一切都是按值传递的。因此,我们在被调用函数中看到的指针变量包含地址的副本。对数组元素所做的任何更改(通过取消引用指针)都会影响原始数组,[因为仅复制数组地址(而不复制数组元素本身)]。

简单地说,这里传递数组第 0 个元素的地址,然后对其进行访问。这就是反射(reflect)更改的原因,因为您是通过指针访问原始元素,而不是它们的副本。

关于c - 发送结构数组时程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47368271/

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