为了用整数填充结构(然后在程序中进一步传递)我认为以下方法可行:
main() {
struct songs {int pitch[5], length[5];} songs[4];
int i[5]={1,22,23,14,52};
int k=0;
songs[0].pitch=i;
for (k=0; k<5; k++) printf("%d\n",songs[0].pitch[k]);
}
但是这会出现错误“赋值中的类型不兼容”
如果我不将此数组传递给结构,则使用以下内容:
main() {
int i[5]={1,22,23,14,52};
int k=0;
for (k=0; k<5; k++) printf("%d\n",i[k]);
}
它会编译并显示数组的内容。
我意识到可能有一个简单的解决方法,但任何帮助都会很棒!
提前致谢
最佳答案
C89 不允许您将一个数组分配给另一个数组。这是 C99 的相关部分,但除了提到 C99 仅类型 _Bool
之外,文本在 C89 中几乎相同。 . (我只有C89的纸质版)
数组不符合这些条件中的任何一个——它们不是算术类型,它们不是结构或 union 类型,它们也不是指针1。因此,您不能对它们使用赋值运算符。
但是,您可以使用 memcpy
.如果您替换此行:
songs[0].pitch=i;
用这一行:
memcpy(songs[0].pitch, i, sizeof(i));
您会得到您期望的行为。 (当然首先包括 <string.h>
之后)
1 从技术上讲,6.3.2.1/3 说数组在被operator=
看到之前被转换成一个右值 指针。 ,但这样的赋值仍然被禁止,因为 6.5.16/2 要求赋值的左侧是左值。
关于c - 将数组传递给 C 中的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27152743/