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等标准类型名一样,都是数据类型,具有同样的作用,都是用来定义变量的。

参考资料来源:百度百科—结构体

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-13
无论是在写种语言,当调用任何函数foo(type x)的时候,你都需要考虑函数的调用本身是否会对x的值造成影响。
就本例的C代码来说,这里type是一个结构体。当调用结构体时,实际上函数把这个结构体又复制了一份,并对复制的内容进行修改,所以对被调用的结构体无影响。
如果想要让函数改变原被调用结构体,需要把函数参数类型改成指针
int func(struct tree* t)
{
t->x=10;
t->s="computer";
return(0);
}
然后在调用的时候写成
func(&t);
就行了。原因是虽然结构体指针的值被复制了一份,但是结构体本身没有被复制。所以函数得到了指向结构体的指针的一份copy,对指针指向的原结构体进行了修改。
第2个回答  2012-06-13
#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

本回答被提问者和网友采纳
第3个回答  2012-06-13
执行func后,吧结构体的内部变量重新赋值了!
相似回答