嘿,我真的很陌生,我已经坐了很长一段时间,试图学习使用结构的最基本的东西。
我现在正在尝试将我的结构的一部分复制到另一个结构中,所以我可以按照我认为合适的方式重新排列它们。这是我到目前为止所提出的,我已经多次修改代码试图让它工作,所以如果你能解释我应该如何改变代码以及为什么我会非常高兴。
到目前为止我想出的是:
struct fruits {
char name[20]
int in_stock;
}
struct fruits temp, stock[] = {
{"Apples", 10}
{"Pears", 15}
{"Bananas", 12}
}
从我到目前为止所理解的(我可能非常错误)我创建了两个具有相同内容的结构?
我现在要做的只是在第一个和第三个元素上切换位置(带有12个香蕉的10个苹果)
这就是我被困的地方。 我尝试了很多方法
temp[1] = stock[1];
stock[1] = stock[3];
stock[j + 1] = temp[j];
或使用memcpy
memcpy(&temp[1], &stock[1], sizeof(fruits));
memcpy(&stock[1], &stock[3], sizeof(fruits));
memcpy(&stock[3], &temp[1], sizeof(fruits));
还尝试移动单个元素
memcpy(&temp[1].name, &stock[1].name, sizeof(fruits));
memcpy(&temp[1].in_stock, &stock[1].in_stock, sizeof(fruits));
.
.
.
答案 0 :(得分:1)
C中的数组从0开始编制索引,因此数组的第一个元素是元素0,第三个元素是元素2.另外,temp
不是数组,所以不要使用括号表示法与temp
:
temp = stock[0];
stock[0] = stock[2];
stock[2] = temp;
答案 1 :(得分:0)
你有这个:
struct fruits temp, stock[] = {
{"Apples", 10},
{"Pears", 15},
{"Bananas", 12},
};
这声明了两个变量。第二个是stock
,是三个结构的数组;三者中的每一个都是struct fruits
类型。第一个temp
是struct fruits
类型的结构。
因此,当您尝试索引temp
时,它不起作用。
这是获得两个长度相同的数组的简单方法。
#define FLEN 3 /* length of fruits array */
struct fruits stock[FLEN] = {
{"Apples", 10},
{"Pears", 15},
{"Bananas", 12},
};
struct fruits temp[FLEN];
对于stock
,如果您不提供3个值,C编译器将发出警告。然后,通过重新使用FLEN
temp
,您将得到两个长度相同的数组。
如果你真的想用相同的东西初始化两个数组,我建议你这样做:
#define FRUIT_VALUES \
{"Apples", 10}, \
{"Pears", 15}, \
{"Bananas", 12},
struct fruits stock[] = { FRUIT_VALUES };
struct fruits temp[] = { FRUIT_VALUES };