您的位置:首页 > 编程语言 > C语言/C++

结构体赋值问题!

2015-08-07 16:19 141 查看
首先我们可以回顾数组的赋值问题,在数组中,比如我们定义一个数组arry,里面包含五个整形数:
int arry[5]={1,2,3,4,5};
声明这个数组后,会为它分配一定内存,而且我们知道arry代表的是数组的首地址。但是如果我们用下面的方法肯定是不行的,如下:
int arry[5];
arry={1,2,3,4,5};
有时候我们很容以犯错的是以为给数组arry赋值,但是我们刚刚说过,声明数组arry之后,arry就是数组的首地址,arry就成了一个常量,很显然,常量是不能被赋值的。所以arry={1,2,3,4,5}很显然是错误的。
对于结构体,可能很多人也会有这个疑问,结构体到底可不可以直接赋值呢?今天自己学习了一下结构体,于是就自己写代码练习,结果遇到问题了!首先我们看一个最简单的结构体程序:
第一种情况:
搜索#include<stdio.h>
int main()
{
struct point{
int x;
int y;
};
struct point p1={1,1};
printf("%d %d\n",p1.x,p1.y);
return 0;
}



很显然这样是没问题的,运行的结果如图所示。
现在把程序改成如下:
第二种情况:
#include<stdio.h>
#include<math.h>
int main()
{
struct point{
int x;
int y;
};
//struct point p1={1,1};
struct point p1;
p1.x=1;
p1.y=2;
printf("%d %d\n",p1.x,p1.y);
return 0;
}
这段代码也是没有问题的,运行结果如下所示 :



上面两种情况我们看到,一种是声明一个结构体的时候直接赋值,没有问题,另一种是声明一个结构体变量后给结构体变量中的成员赋值,也是没有问题的!那么还有第三种情况如下:
第三种情况:
#include<stdio.h>
#include<math.h>
int main()
{
struct point{
int x;
int y;
};
//struct point p1={1,1};
struct point p1;
p1={1,2};
printf("%d %d\n",p1.x,p1.y);
return 0;
}
这种情况下就报错了,编译也不过,在VC++6.0下面提示的编译错误说是少了一个分号。但事实上也不存在少分号的情况,唯一的问题就是结构体不能声明后直接赋值。所以经过验证,结构体也是不能直接给结构体变量赋值的。但是至于是不是跟数组类似呢?是不是意味着结构体变量一经声明也变成了一个变量呢?于是又做如下验证:直接打印结构体变量。
验证一:(验证1看上去打印出来的像是地址常量,所以可能会不能被直接赋值)



验证二:(很显然验证二看上去结构体变量p1更像是一个整形变量,难道经过赋值之后的p1和第一个成员变量的值保持一致?



验证三:(经过第三次验证发现,结构体变量p1的经过赋值后,结构体变量的值惊奇般和结构体中第一个成员变量的值保持一直!)







猜测性结论:结构体是可以声明的时候赋值的,也可以通过声明结构体变量之后,再给结构体中的成员变量赋值,但是不能直接给结构体变量赋值;而且一旦赋值成功之后,结构体变量的值竟然和结构体中的第一个成员变量的值保持一直!说明结构体变量又是一个和第一个成员变量类型一直的变量。至于为什么,还有待进一步学习理解!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言