Vid*_*dya 3 c arrays pointers multidimensional-array
#include <stdio.h>
int main()
{
typedef struct s
{
int a;
int b[5];
char c[2];
}st;
st vs[1];
vs[0] = {1,{1,2,3,4,5},{'c','d'}};
printf("%d:a\n",vs[1].a);
printf("%d:b[0]\t %d:b[4]\n",vs[0].b[0],vs[0].b[4]);
printf("%c:c[0]\t %c:c[1]\n",vs[0].c[0],vs[0].c[1]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?
上
gcc -o main *.c
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
main.c:在函数'main'中:main.c:15:12:错误:'{'标记vs [0] = {1,{1,2,3,4,5}之前的预期表达式,{'c ", 'D'}};
但如果我有这个:
#include <stdio.h>
int main()
{
typedef struct s
{
int a;
int b[5];
char c[2];
}st;
st vs[] = {
{1,{1,2,3,4,5},{'c','d'}}
};
printf("%d:a\n",vs[0].a);
printf("%d:b[0]\t %d:b[4]\n",vs[0].b[0],vs[0].b[4]);
printf("%c:c[0]\t %c:c[1]\n",vs[0].c[0],vs[0].c[1]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有用.这是什么逻辑.
如何使用st vs [1]方法使其工作?
您只能在声明变量时进行支撑初始化.所以,
st vs[] = {
{1,{1,2,3,4,5},{'c','d'}}
};
Run Code Online (Sandbox Code Playgroud)
被允许.但
vs[0] = {1,{1,2,3,4,5},{'c','d'}};
Run Code Online (Sandbox Code Playgroud)
不是.因为这不是初始化而是分配.
但是,您可以使用C99复合文字,参见C11,6.5.2.5:
vs[0] = (struct s){1,{1,2,3,4,5},{'c','d'}};
Run Code Online (Sandbox Code Playgroud)