c语言结构体
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言结构体相关的知识,希望对你有一定的参考价值。
#include <stdio.h>
struct tree
int x;
char *s;
t;
int func(struct tree t)
t.x=10;
t.s="computer";
return(0);
main()
t.x=1;
t.s="minicomputer";
func(t);
printf("%d?%s\n",t.x,t.s);
求解读一下这个程序。我不明白最后printf的为什么还是1和minicomputer,而不是10和computer
C语言结构体定义:struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。
结构体是C语言中聚合数据类型(aggregatedatatype)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
扩展资料
1、struct是声明结构体类型时必须使用的关键字,不能省略。“结构体”这个词是根据英文单词structure译出的。
2、structSTUDENT是定义的数据类型的名字,它向编译系统声明这是一个“结构体类型”,包括name、num、sex、age、score、addr等不同类型的项。
3、structSTUDENT与系统提供的int、char、float、double等标准类型名一样,都是数据类型,具有同样的作用,都是用来定义变量的。
参考资料来源:百度百科—结构体
参考技术A 无论是在写种语言,当调用任何函数foo(type x)的时候,你都需要考虑函数的调用本身是否会对x的值造成影响。就本例的C代码来说,这里type是一个结构体。当调用结构体时,实际上函数把这个结构体又复制了一份,并对复制的内容进行修改,所以对被调用的结构体无影响。
如果想要让函数改变原被调用结构体,需要把函数参数类型改成指针
int func(struct tree* t)
t->x=10;
t->s="computer";
return(0);
然后在调用的时候写成
func(&t);
就行了。原因是虽然结构体指针的值被复制了一份,但是结构体本身没有被复制。所以函数得到了指向结构体的指针的一份copy,对指针指向的原结构体进行了修改。 参考技术B #include <stdio.h>
struct tree
int x;
char *s;
t;
int func(struct tree t)
t.x=10;
t.s="computer";
return(0);
main()
t.x=1;//此处t是全局变量t
t.s="minicomputer";
func(t);//将全局变量t的值传递给形参t,这是单向值传递,所以在func里改变的是func里的局部变量的值,而不是全局变量的值
printf("%d?%s\n",t.x,t.s);//此处t也是全局变量t
追问
哪如果想要func函数起作用,应该怎么改0 0
本回答被提问者和网友采纳 参考技术C 执行func后,吧结构体的内部变量重新赋值了!C语言,结构体
这题怎么做?
struct在C语言中是一个关键字,用于定义结构数据类型。问题中的两种定义的区别在于第一种是给student数据类型,重新定义了一个类型别名,而第二种则单纯的表示一种叫做student的数据结构类型。两者的主要区别在于后面直接定义变量时。如下代码,则可以直接在结构体后面定义一个zhang_san的结构体变量。
struct?student
int?num;
struct?student?*next;
zhang_san; 而第一种的定义,则会出现错误。
typedef?struct?student
?int?num;
?struct?student?*next;
student?zhang_san;
扩展:
“结构”是一种构造数据类型,现在一般叫做用户自定义数据类型,它是由若干“成员”组成的。?每一个成员可以是一个基本数据类型或者又是一个构造类型。?结构即是一种“构造”而成的数据类型,?那么在说明和使用之前必须先定义它,也就是构造它。如同在说明和调用函数之前要先定义一样。
定义一个结构的一般形式为:
struct结构名
//成员表列
;
成员表由若干个成员组成,?每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:“类型说明符?成员名;”。成员名的命名应符合标识符的书写规定。例如:
struct?stu
????int?num;
????char?name[20];
????char?sex;
????float?score;
;
在这个结构定义中,结构名为stu,该结构由4个成员组成。?第一个成员为num,整型变量;第二个成员为name,字符型数组;第三个成员为sex,字符型变量;第四个成员为score,浮点型变量。?应注意在括号后的分号是必不可少的。 参考技术A 输出结果是16。因为函数中的形式参数x只是接收了主调函数中实参变量a的值拷贝,所以函数fun1中对x的成员的改变并不作用到主调函数中的变量a上,输出的是a的成员,所以值没有改变。
以上是关于c语言结构体的主要内容,如果未能解决你的问题,请参考以下文章