gpt4 book ai didi

c - 在函数中传递参数以将结构值转换为数组

转载 作者:行者123 更新时间:2023-12-02 08:22:13 24 4
gpt4 key购买 nike

我将函数 void Assign_numbers 传递给了 void Adding。当我将它更改为指针并编译它时,第一个数组值从 void Assign_numbers 中的 number.a 返回相同的值。数组中从 ptr[1] 开始的另一个值给出了一个完全不同的数字。你能帮我一下吗,这样数组就可以输出其他分配的数字了。请不要更改格式。

#include <stdlib.h>
#include <stdio.h>

#define Max 6

struct Numbers
{
double a,b,c,d,e,f;
};

void Adding(struct Numbers *ptr)

void Assign_numbers()
{
struct Numbers number;

number.a=45.78;
number.b=81.45;
number.c=56.69;
number.d=34.58;
number.e=23.57;
number.f=78.35;

Adding(&number);
}

void Adding(struct Numbers *ptr)
{
int i =0;

for(i;i<Max;i++)
{
ptr[i];
printf("%.2f\n",ptr[i]);
}
}

int main()
{
Assign_numbers();
return 0;
}

最佳答案

指针的类型(在您的例子中是 struct Numbers)定义数组中元素的偏移量。例如,如果您有某种类型的数组T,使用a[i] 将意味着从地址获取T 的值a + i * sizeof(T) 或更简单。

注意:如果为真,a[i] 将被转换为 *(a + i),这就是 i 的原因[a] 工作得很好。参见 With arrays, why is it the case that a[5] == 5[a]?问题。

现在您有了 struct Numbers *ptr 并使用 ptr[0] 使其成为 *(ptr + 0 * sizeof(struct Numbers)),它会引导你到你内存中的结构。但是,使用 ptr[1] 会导致您到达 *(ptr + 1 * sizeof(struct Numbers)),但是内存中的该地址没有数据,并且这会导致未定义的行为。

你想要做的是用 double* 遍历你的结构,例如

void Assign_numbers()
{
struct Numbers number;

number.a=45.78;
number.b=81.45;
number.c=56.69;
number.d=34.58;
number.e=23.57;
number.f=78.35;

Adding((double*)&number);
}

void Adding(double* ptr)
{
int i = 0;
for(i; i < Max; i++)
{
ptr[i];
printf("%.2f\n",ptr[i]);
}
}

打印

45.78
81.45
56.69
34.58
23.57
78.35

另一种方法是使用union。参见 C method for iterating through a struct's members like an array?例如。

关于c - 在函数中传递参数以将结构值转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35955065/

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