为了用整数填充结构(然后在程序中进一步传递),我认为以下方法可行:
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]);
}
然而,这会导致错误&#34;分配中的不兼容类型&#34;
如果我不将此数组传递给结构,请使用以下命令:
main() {
int i[5]={1,22,23,14,52};
int k=0;
for (k=0; k<5; k++) printf("%d\n",i[k]);
}
它会编译并显示数组的内容。
我意识到可能有一个简单的解决办法,但任何帮助都会很棒!
提前致谢
答案 0 :(得分:6)
C89不允许您将数组分配给另一个数组。这里是C99的相关位,但C89中的文本大致相同,只提到仅C99类型_Bool
。 (我只有C89的纸质副本)
阵列不适合任何这些条件 - 它们不是算术类型,它们不是结构或联合类型,并且它们不是指针 1 < / SUP>。因此,您无法在其上使用赋值运算符。
但是,您可以使用memcpy
。如果你替换这一行:
songs[0].pitch=i;
这一行:
memcpy(songs[0].pitch, i, sizeof(i));
你会得到你期望的行为。 (当然首先包括<string.h>
)
1 从技术上讲,6.3.2.1/3表示数组在被operator=
看到之前被转换为 rvalue 指针,但这样的赋值仍然被禁止,因为6.5.16 / 2要求作业的左侧是左值。
答案 1 :(得分:2)
由于C处理数组的方式,你不能分配给那样的数组。您需要单独或通过memcpy
(或类似功能)复制值。例如:
for (k=0; k<5; k++){
songs[0].i[k] = i[k];
}
或:
memcpy(songs[0].i, i, sizeof i);
请注意,memcpy
要求您加入<string.h>
答案 2 :(得分:0)
您需要单独复制数组元素。主函数也应该返回一个int。
int main( void ) {
struct songs {int pitch[5], length[5];} songs[4];
int i[5]={1,22,23,14,52};
int qq, k=0;
for( qq=0; qq<5; qq++) {
songs[0].pitch[qq]=i[qq];
}
for (k=0; k<5; k++) printf("%d\n",songs[0].pitch[k]);
return 0;
}
答案 3 :(得分:0)
C不允许您将数组复制到数组中。你必须逐个元素复制。
struct songs {int pitch[5], length[5];} songs[4];
int i[5]={1,22,23,14,52};
int k=0;
for (k=0; k<5; k++) songs[0].pitch[k] = i[k];
for (k=0; k<5; k++) printf("%d\n",songs[0].pitch[k]);
答案 4 :(得分:0)
当您声明一个数组时,您有两个选项:
int * i; // #1; you do this when you don`t know the size
int i[size]; // #2
您无法将数组分配给另一个数组。
正如其他人所建议的那样,你需要做的是逐个复制数组的所有元素:
for (int j = 0; j < 5; j++) {
songs[0].pitch[j] = i[j];
}
请记住,使用索引运算符[]与取消引用指针相同。
甚至更多,当你说pitch[j]
时,你实际上将指针j向前移动并取消引用它;就像你会说*(pitch+j)
答案 5 :(得分:0)
the following, compiles, runs, works.
notice the correction to the declaration of main
notice the addition of #include string.h to support memcpy function
notice the proper return statement at the end
and most importantly,
notice the correct method of copying an array
as a side note:
making the struct tag name and the instance name the same
is very bad programming practice
#include <stdio.h>
#include <string.h>
int main()
{
struct songs
{
int pitch[5];
int length[5];
} songs[4];
int i[5]={1,22,23,14,52};
int k=0;
memcpy( songs[0].pitch, i, sizeof( i ) );
for (k=0; k<5; k++)
{
printf("%d\n",songs[0].pitch[k]);
} // end for
return(0);
}
答案 6 :(得分:-1)
问题在这里,
songs[0].pitch=i;
在结构中使用int *,您不能将数组分配给另一个数组以及结构名称和结构对象。
这样可行。
struct Songs {int* pitch, length[5];} songs[4];