C语言高手请进,结构体里的元素前面有一点“.”代表什么意思?比如 .goodvar

作者&投稿:机仁 (若有异议请与网页底部的电邮联系)
驱动高手和c语言高手请进,一个神奇的结构体,求解~

1.建议你看以下GUN C的扩展语法。这是ext2文件系统的操作函数,应该是Linux内核的。
2.以上的代码作用是:给结构体中的每个成员赋值。用点号和结构体成员名赋值的用法内核中很常见的。
3.这种方式可以不必给结构体所有的成员赋值,也可以不按顺序。其他没用点号赋值的成员默认为空。

结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构。
在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。
结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。

扩展资料将一个结构体变量中的数据传递给另一个函数,有下列3种方法:
(1) 用结构体变量名作参数。一般较少用这种方法。
(2) 用指向结构体变量的指针作实参,将结构体变量的地址传给形参。
(3) 用结构体变量的引用变量作函数参数。
在软件开发过程中,常常需要动态地分配和撤销内存空间,例如对动态链表中结点的插入与删除。C语言中是利用库函数malloc和free来分配和撤销内存空间的。
参考资料来源:百度百科--结构体

“.”是访问成员的意思。优先级同“()”。 例:"对象.成员" 或者"对象->成员"都是表示访问对象的某个成员的意思(读写成员)。也就是访问某个成员的变量。这里只是省略不写了。也可以写上atag_tcc_entry.output = 0;一样的。

前面不加点也可以赋值,加 “.”的话可以不考虑赋值顺序,比如可以先给resolution赋值,在给output赋值,可以写成这样:
struct atag_tcc_entry tcc_param = {
.resolution = 0,
.output = 0,
}
原理就是因为加 “.”就表示在这个结构体中选择这个变量来赋值,所以可以不考虑结构体中变量的顺序
不加"."的话赋值可以直接写
struct atag_tcc_entry tcc_param = {
0, 0,
}
这样就必须要按照顺序来赋值了

“.”是结构变量访问其成员的运算符,上面初始化可写为:
struct atag_tcc_entry tcc_param;//定义结构变量
atag_tcc_entry tcc_param.output=0;//分别初始化成员
atag_tcc_entry tcc_param.resolution=0;

//定义一个结构体
struct A
{
int a,b;
}

struct A s;//声明一个结构体A的对象s
要调用s里的变量a和b 就需要用点,如s.a就是s里的a

struct pcb_type
{
int id;
char name[5];
int priority;
char state[5];
};
void main()
{
void list(struct pcb_type pcb);

struct pcb_type pcb[10], *p;
int i;
for(i=1,p=pcb;i<=10;p++,i++)
{
printf("Please input the date of pcb[%d]:\n",i);
scanf("%d\n%s\n%d\n%s",&(p->id),&(p->name),&(p->priority),&(p->state));
}
for(i=1;i<=10;i++)
list(pcb[i]);
}
void list(pcb)
struct pcb_type pcb;
{
printf("%d%s%d%s",pcb.id,pcb.name,pcb.priority,pcb.state);
printf("inputting complete!\n");
}

我用VC编译的可以运行!


青龙满族自治县13369748715: C语言定义结构体时,为什么只有name前有*,其他变量前没有? -
只泽碧洁: 定义结构体变量其实就跟定义普通的变量相似,比如你在定义指针变量的时候,会有这样的定义:int *p;同样在定义结构体变量的时候也有这样的定义.就拿你说的这个而言,name 表示的就是一个指针型的结构体变量.它里面存的是一个地址,这个地址就是它所指向的那个结构体的首地址.总的来说*一般情况下表示的就是指针

青龙满族自治县13369748715: 请问C语言中的结构体中的*next *head这些怎么深刻了解. -
只泽碧洁: 首先需要知道单链表的结构,自行百度;struct student { int num; char* name; struct student* next; };*head指向链表的第一个元素的地址,*next是结构体中的一个变量吧,它指向下一个链表元素的地址;链表末尾的元素*next=NULL

青龙满族自治县13369748715: 结构体的C语言中的结构体 -
只泽碧洁: 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构.结构体同时也是一些元素的集合,这些元素称为结构体的成...

青龙满族自治县13369748715: C语言中结构体定义是分号前是变量还是类型 -
只泽碧洁: 选项A中的a是不是指ord类型的结构体变量,是的,这里,是先定义一个结构体,再定义他的一个变量 a.C 选项,紧接着结构体( 在 } 后)可以直接定义变量.D 选项,无名结构体,C/C++是允许的.无名结构体只能紧接着结构体( 在 } 后)可以直接定义变量.由于是无名的,在这(结构体 } 后面的 ;)之后,就无法再定义这个结构体变量了.记住,C/C++ 的语句是以分号(西文)结束的.

青龙满族自治县13369748715: C语言高手请进~~~~~ -
只泽碧洁: i1已经赋值了阿 static struct s a[3]={1,&a[1],2,&a[2],3,&a[0]},这里定义了一个 结构数组a ,并且将其初始化了,其中a[0]={1,&a[1]},a[1]={2,&a[2]} a[2]={3,&a[0]},后面ptr = &a[1];就是让ptr指向a[1],所以ptr的值就是{2,&a[2]},也就是ptr->i1=2,答案d又给他做了自增1,结果为3了.

青龙满族自治县13369748715: 关于C语言结构体的问题 拜托高手帮忙! -
只泽碧洁: 当一个对象有很多属性的时候,就可以使用结构体对它进行定义.实质上,结构体也是相当于c++中的类一样,是一种特殊的类.就比如说一个学生,他有姓名,性别,年龄,学号,成绩等属性,那么这时候就可以采用结构体对一个学生进行定...

青龙满族自治县13369748715: c语言中如何将按结构体中的某个元素大小,将结构体排序输出 -
只泽碧洁: 做一个结构数组就可以了,这也算是一种容器了吧? struct protcol {char prot[16]; //协议名称int num; //协议发生次数 };protcol p[10]; p[0].prot = "FTP";p[0].num = 3; //... 然后就是用num排序,就和普通int数组排序一样 然后再顺序输出

青龙满族自治县13369748715: C语言中,用结构体类型里的元素时,用–>与用点用什么不同 -
只泽碧洁: L–>length和L.length 那是由于结构体和ss指针的区分哦~

青龙满族自治县13369748715: 驱动高手和c语言高手请进,一个神奇的结构体,求解 -
只泽碧洁: 1.建议你看以下GUN C的扩展语法.这是ext2文件系统的操作函数,应该是Linux内核的.2.以上的代码作用是:给结构体中的每个成员赋值.用点号和结构体成员名赋值的用法内核中很常见的.3.这种方式可以不必给结构体所有的成员赋值,也可以不按顺序.其他没用点号赋值的成员默认为空.

青龙满族自治县13369748715: C 语言中,在结构体前面加上非符号(!),这个表示什么意思?
只泽碧洁: 这是一种不规范的写法,虽然编译器可以通过也并不是针对结构体的,这只是针对指针的,一般用于条件判断语句中在指针前加感叹号用于判断是否为空,例如:char *p = NULL;if (!p) // 如果p为空{ printf("error\n");}

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网