C语言结构体赋值

2025-04-05 08:05:48
推荐回答(3个)
回答1:

首先这样编译会出错。
struct
{
char ch;
int pri;
}
定义结构体类型,后面没有跟分号,说明后面是该类型的变量列表,之后遇到Pri接下来的空格后面跟的lpri编译器就不知道要干什么了。
如果用struct
{
char ch;
int pri;
};,还是出错,因为之后的Pri没有声明或定义。
如果用struct Pri
{
char ch;
int pri;
};,纯C的话不行,Pri是结构体名而不是类型名,会编译出错。C++下会把Pri当作struct Pri,不会出错。
可以这么写:
typedef struct
{
char ch;
int pri;
}Pri;
Pri lpri[]={{'=',0},{'(',1},{'*',5},{'/',5},{'+',3},{'-',3},{')',6}};
Pri rpri[]={{'=',0},{'(',6},{'*',4},{'/',4},{'+',2},{'-',2},{')',1}};
最后两行也可以这样写:
Pri lpri[]={{'=',0},{'(',1},{'*',5},{'/',5},{'+',3},{'-',3},{')',6}},
rpri[]={{'=',0},{'(',6},{'*',4},{'/',4},{'+',2},{'-',2},{')',1}};
注意倒数第二行是分号还是逗号会影响初始化列表的语义。
(顺便,这个不是赋值。)
话说回来,一开始的写法去掉Pri是正确的(只是定义之后无法访问该类型,一般不推荐):
struct
{
char ch;
int pri;
}
lpri[]={{'=',0},{'(',1},{'*',5},{'/',5},{'+',3},{'-',3},{')',6}},
rpri[]={{'=',0},{'(',6},{'*',4},{'/',4},{'+',2},{'-',2},{')',1}};
====
[原创回答团]

回答2:

struct
subject
{
int
score;
}*sub;
sub是一个结构体指针,因此初始化就把NULL赋值给sub就可以了。
而要想有score这个变量,sub必须指向一个可用内存,用malloc申请。

回答3:

x_num=(*last).num; ///数组都要用 strcpy进行字符串指针式赋值
char name[Max_name];///数组都要用 strcpy进行字符串指针式赋值
int num[Max_num]; //数组都要用 strcpy进行字符串指针式赋值
其实你换成 int num;就可以自己赋值了
用sancf("%d",p->num);