c - 将数组传递给 C 中的结构

标签 c arrays struct c89

为了用整数填充结构(然后在程序中进一步传递)我认为以下方法可行:

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的纸质版)

Simple Assignment section

数组不符合这些条件中的任何一个——它们不是算术类型,它们不是结构或 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/

相关文章:

c++ - 使用strtok按条件拆分字符串?

c - 如何使用 C 中的函数接受作为一种数据类型并存储在定义的结构中?

c - 处理用户的输入

c - 从 Char* 数组中提取数字(C 字符串)

javascript - 使用 sort() 移动数组开头的对象

mysql - 从对象数组中选择某些键

使用 C 函数连接到大 char*

c - 代码块中的警告, "operation may be undefined"

java - 有没有办法在 Java 1.4 中获得与结构等效的方法?

c# - 为什么 'struct Nullable<T>' 不是结构?