结构名能否直接赋值, 请看??

tobeistodo1 2004-04-29 01:57:27
//做一个程序时偶然用到了结构名相互赋值,发现后觉得有问题,觉得是否应该用指针,但调试
//通过了,于是做了这个小测试,竟发现无问题.现在的疑惑是c允不允许如此?
//验证结构是否可以用名直接相互赋值
//此验证可以
//数组名是不可以的, 那么结构为什么可以?
//是c允许还是编译器的原因, 在VC++6.0上调试通过运行均无问题?

#include <stdio.h>

struct student
{
int num;
char spell;
double a;
double b;
char spe;
char as;
};

int main()
{

student student1 = {1, 'a', 0.2, 0.02, 'c', 'b'}, student2;

student2 = student1; //此处直接用名赋值, 并成功

printf("%d %c %f %f\n", student2.num, student2.spell, student2.a, student2.b, student2.spe);
printf("%c, %c\n", student2.spe, student2.as);

return 0;
}
...全文
158 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuyang2708 2004-05-01
  • 打赏
  • 举报
回复
结构体整体的赋值,就是一个指针。
tobeistodo1 2004-04-30
  • 打赏
  • 举报
回复
// <<The C Programming Language>>有这样一段话:
// The main change made by the ANSI standard is to define structure assignment - structures may
// be copied and assigned to, passed to functions, and returned by functions. This has been supported
// by most compilers for many years, but the properties are now precisely defined. Automatic
// structures and arrays may now also be initialized.
// 看来C是支持函数返回结构类型后赋值的, 但直接赋值是否允许呢, 我在书中没找到,
// 大家有没有在这方面很明确的"证据"??
// 谢谢大家, 继续探讨!
崔作非 2004-04-30
  • 打赏
  • 举报
回复
在C++中结构体,联合体这些东东完全可以不用在前面加上相应关键字像普通变量一样直接使用,这是C++增加的语法特色,在C中当然不行了。
olivertree 2004-04-30
  • 打赏
  • 举报
回复
定义以后数组的大小是固定的...........
tobeistodo1 2004-04-30
  • 打赏
  • 举报
回复
谢谢!我们在做数据机构的作业时遇到了这个问题,没在纯c编译器里试过.就想搞懂c语法是否允许.
hslinux 2004-04-30
  • 打赏
  • 举报
回复
结构可以互相赋值,因为结构的大小是固定的,已知的。
数组不可以,是因为数组的大小是不固定的。

另外,数组是一个数据类型的聚集,他本身不是数据类型,而结构却是一种自定义的类型。

再补充一点:两个不同结构名的变量不可以相互赋值,即使两者包含同样的成员。
olivertree 2004-04-30
  • 打赏
  • 举报
回复
跟数组大小没关系吧?c里面定义不是固定大小的数组会导致错误,即c不支持动态数组。
ckc 2004-04-30
  • 打赏
  • 举报
回复
结构可以互相赋值,因为结构的大小是固定的,已知的。
数组不可以,是因为数组的大小是不固定的。
这个应该是c的规定,不依赖于编译器的。
好了,搞定收工。
tobeistodo1 2004-04-30
  • 打赏
  • 举报
回复
谢谢大家,继续探讨!!
chengsion 2004-04-30
  • 打赏
  • 举报
回复
其实,如果研究C的问题,还是使用纯C的编译器的好,不要使用C++编译器.
因为,对于struct,在C++中,认为和Class是一样的,而显然,类的实例是可以相互赋值的.
strongld 2004-04-29
  • 打赏
  • 举报
回复
同意 olivertree(忽然间上进起来了)。
以下摘自“C语言编辑宝典”:
结构是一个新的数据类型, 因此结构变量也可以象其它类型的变量一样赋值、
运算, 不同的是结构变量以成员作为基本变量。
olivertree 2004-04-29
  • 打赏
  • 举报
回复
...
elvahuang 2004-04-29
  • 打赏
  • 举报
回复
那儿有数组哦

elvahuang 2004-04-29
  • 打赏
  • 举报
回复
student student1 = {1, 'a', 0.2, 0.02, 'c', 'b'}, student2;
//define two object:student1 and student2

student2 = student1;
//copy
hhcjb 2004-04-29
  • 打赏
  • 举报
回复
其实:
可可如下解释:
“数组名代表地址!声明时在内存中元素空间位置靠他定好!此时数组名相当于常量,不能改变!但结构体名就更int i;中的“i”的地位一样。所以。。。
olivertree 2004-04-29
  • 打赏
  • 举报
回复
说可以的把程序贴出来我在turboc20下试试:D
wgm328 2004-04-29
  • 打赏
  • 举报
回复
可以,没问题
olivertree 2004-04-29
  • 打赏
  • 举报
回复
好像不行吧.我在turboc 20下不能赋值。(我说的是数组-_-#)
liem 2004-04-29
  • 打赏
  • 举报
回复
结构体变量之间是可以直接赋值的,与类一样,这一赋值是bitwise copy
在C中也是可以的。
olivertree 2004-04-29
  • 打赏
  • 举报
回复
看看c语言基础,书上都解释得很清楚的。
加载更多回复(7)

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧