马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 qq1242009750 于 2017-12-1 21:36 编辑
大家好,我又来了 嘻嘻;今天我们就来谈谈数组于数组之间为什么不能直接赋值把 哈哈
我们都知道数组(int a[20])和 单个类型(int a)如何创建了.
数组
单个类型
好知道了如何创建后我们来看一下以下的代码int Arr[10] = {1,2,3,4,5,6,7,8,9,0};
int Arr1[10];
Arr1 = Arr
哈哈,想必大家都知道 ,这个代码肯定会报错,
报错:做操作位数必须为左值.
同样我们这么做也会报错而且报的是相同的错误
也就是说Arr1是一个常量,而Arr1同时也是数组的首地址,所以我们可以认为 Arr1 于 常量指针很相似,是一个不可以被改变的地址.
我们还知道int类型是占4个内存单元的,也就是说int的传输是4个内存单元,
当然我们也知道Arr1 和 Arr都是int类型而且占的内存单元是一样的 40个 ,如果你说一次性传输40个内存单元是不是有点不符合逻辑呢?
好再来看一下代码
这个代码,没有报错,好吧,那么我们这样子来试试
咦!这样也没有报错嘢!这样的话我们可以推断出一下的结论:
图上我们可以看出i被当作了偏移地址
i是一个变量,也是5的地址,这个东西既是变量又是地址 ,,, 我们联想到了 指针..
也就是说这个 i 于 指针很相似.
好了 ,到结构体了,
那......什么是结构体呢??
结构体就是可以包含任意多种类型的类型。
PS:结构体本身就是一种类型.
结构体的定义如下:struct MyStruct
{
int a[2];
};
结构体都写出来了,大家也不妨来猜一猜这个结构体的大小吧......
这里不写出答案,只写出这个:
好,我们来看一下的代码#include <stdio.h>
struct MyStruct
{
int a[2];
};
int main(void)
{
struct MyStruct Stu1,Stu2;
Stu1 = Stu2;
getchar();
return 0;
}
好,代码不会报错 哈哈哈哈...
是不是有很多朋友们都会有这样的疑问呢?
为什么结构体就能直接赋值呢?
下面给你来揭晓:
哈哈 看到了把,Stu2 的内容直接赋值给 Stu1
再来看一下:
咿呀!报错了 .... 无效,Stu1是一个实体!!
这个怎么解释呢?
其实也很简单:因为我们定义结构体的时候在结构体里面还定义了一个 int 类型的数组,如果Stu1++了,就对齐不到int 数组的内存了
,所以结构体只能
这样:
分析完了................ 不足之处请大家多多指出..
|