qq1242009750 发表于 2017-2-10 00:11:20

来谈谈为什么数组与数组之间不能直接赋值,而结构体和单个类型都可以呢

本帖最后由 qq1242009750 于 2017-12-1 21:36 编辑

大家好,我又来了 嘻嘻;今天我们就来谈谈数组于数组之间为什么不能直接赋值把 哈哈{:10_297:}

我们都知道数组(int a)和 单个类型(int a)如何创建了.

数组
int a

单个类型
int a

好知道了如何创建后我们来看一下以下的代码
int Arr = {1,2,3,4,5,6,7,8,9,0};
int Arr1;

Arr1 = Arr
哈哈,想必大家都知道 ,这个代码肯定会报错,

报错:做操作位数必须为左值.

同样我们这么做也会报错
Arr1++;
而且报的是相同的错误

也就是说Arr1是一个常量,而Arr1同时也是数组的首地址,所以我们可以认为 Arr1 于 常量指针很相似,是一个不可以被改变的地址.

我们还知道int类型是占4个内存单元的,也就是说int的传输是4个内存单元,
当然我们也知道Arr1 和 Arr都是int类型而且占的内存单元是一样的 40个 ,如果你说一次性传输40个内存单元是不是有点不符合逻辑呢?

{:10_279:}

好再来看一下代码
int i = 5;
int b;

b = i;

这个代码,没有报错,好吧,那么我们这样子来试试
i++;



咦!这样也没有报错嘢!这样的话我们可以推断出一下的结论:

图上我们可以看出i被当作了偏移地址
i是一个变量,也是5的地址,这个东西既是变量又是地址   ,,,我们联想到了 指针..
也就是说这个 i于 指针很相似.{:10_335:}


好了 ,到结构体了,
那......什么是结构体呢??
结构体就是可以包含任意多种类型的类型。
PS:结构体本身就是一种类型.

结构体的定义如下:
struct MyStruct
{
        int a;
};
结构体都写出来了,大家也不妨来猜一猜这个结构体的大小吧......
这里不写出答案,只写出这个:
sizeof(struct MyStrcur);

好,我们来看一下的代码
#include <stdio.h>

struct MyStruct
{
        int a;
};

int main(void)
{
        struct MyStruct Stu1,Stu2;
        Stu1 = Stu2;
       
        getchar();
        return 0;
}
好,代码不会报错 哈哈哈哈...

是不是有很多朋友们都会有这样的疑问呢?
为什么结构体就能直接赋值呢?

下面给你来揭晓:


哈哈 看到了把,Stu2 的内容直接赋值给 Stu1

再来看一下:
Stu1++;

咿呀!报错了.... 无效,Stu1是一个实体!!
这个怎么解释呢?

其实也很简单:因为我们定义结构体的时候在结构体里面还定义了一个 int 类型的数组,如果Stu1++了,就对齐不到int 数组的内存了
,所以结构体只能
这样:
Stu1 = Stu2;

{:10_258:}

分析完了................不足之处请大家多多指出..{:10_298:}




页: [1]
查看完整版本: 来谈谈为什么数组与数组之间不能直接赋值,而结构体和单个类型都可以呢