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}}
====
[原创回答团]
指针就是指向内存的某个地址的一个变量。 结构体指针就是这个指针变量的值必须指向存放该结构体的内存位置。当这个指针没有任何指向时,可以赋值为null值,但是改指针不可使用,程序中应该做判断。下面是一些赋值演示。struct student{int idint score} aaastruct student *p = null//结构体指针p初始化赋值为nullstruct student *p2=&aaa//p2指向aaastruct student *p3=(struct student *)malloc(sizeof(struct student))//内存中申请一个结构体空间,并将地址强制转换为结构体指针变量赋值给p3intmain(void){
structstudentsbao={}
printf("%d,%s\n",bao.id,bao.name)//输出是4224528,空(应该是null)
//structstudentsbao={3,"123"}可以。第一种赋值方法
//strcpy(bao.name,"bao")//可以,
//printf("%d,%s\n",bao.id,bao.name)
//bao.name="bao"错误“stray'\351'inprogram”其他是乱码,
//bao.name[0]='a'
//bao.name[0]='/0'
//printf("%d,%s\n",bao.id,bao.name)
/*这样可以,*/
//chararr[10]="baobao"
////bao.name=arr//error"assignmenttoexpressionwitharraytype"
//scanf("%s",bao.name)//可以,
//printf("%d,%s\n",bao.id,bao.name)
//所以scanf那一类函数都可以。
//还有就是memcpy函数也是可以的
return0
}
扩展资料
C语言结构体数组的直接赋值及数组的长度计算:
#include<stdio.h>
//自定义一个字符串的结构体,包含字符串和字符串长度两个变量
typedefstructStr{
charch[100]
intlength//char数组(字符串)的长度
}myStr
//刚开始声明变量时每个变量的字符串长度length都为0
//这里以长度为10的数组为例,数组长度是1000
//对第0个到第9个结构体数组的长度同时赋值为0
myStrmyStr1[10]={
[0...9]={
.length=0,
}
}
intmain(){
inti
for(i=0i<10i++){
printf("%d\n",myStr1[i].length)
}
return0
}