本帖最后由 刘前辈 于 2012-2-28 20:26 编辑
一个变量有2个特征(只有《C语言详解》和清华C语言教材上有相关内容。)
一个变量有2个基本特征:
1、变量所在单元的值。—— * 称为标量特征。可以用该单元的名字来标识和用 “=”直接赋值。
2、变量所在内存单元的地址。—— & 称为矢量特征。用指针间接寻址。
标量举例:假定8051,DATA 存贮区有2个char 变量a,b 分别分配在40H和50H,那么标量可以用变量名进行赋值: 也即通过 a = b ; 把50H单元的内容拷贝到40H单元。
ANSI C 第15条规定了:结构变量可以整体赋值。——以前的K&R C 标准不允许结构拷贝。—— 但是结构名确实是标量,——它和数组名不一样(数组名是矢量,这是一种退化,所以数组不能整体赋值。)
所以,如若有 2个相同类型结构变量 a , b , 就可以利用结构名来进行(标量)整体赋值。—— C 编译器将像对待上面例子中2个独立存贮单元 a,b一样处理结构变量赋值。 同样写成(struct)
a = b;
所以下面老所长说结构变量也可能重叠,是很可笑的事情。——标量是一个整体。就好像说,40H单元和50H单元可能会出现重叠一样;——杞人忧天了。
#242楼 highgear
结构拷贝也会出现同样的问题,只要源缓冲区和目标缓冲区是重叠的。
老爷子早点退休算了,水平一年比一年差。2个结构拷贝会出现缓冲区重叠?哈哈,让人笑掉大牙!你以为那是数组啊?——老爷子若能像我那样举个例子给大家看看,我输你1,000元!——结构那叫封装!都像你似地闭上嘴还漏气?
难怪讲习所会关大门,基本概念都讲不清:结构变量名是一个标量。什么叫标量?呵呵,玩了一辈子软件,如今年近60了,标量矢量还搞不清。讲了你也不懂:标量就是一个变量的第一特征,它标识一个变量的值。(指针矢量是一个变量的第二特征,它标识一个变量的地址)
2 个变量的值可以、可能重叠吗?老所长大牛重叠一个给俺开开眼?否则,只好输1,000元。
2个结构的缓存分配是静态的,在编译阶段就分配好了,根本不可能重叠!做编译器的人没你那么逊。——数组还可能程序溢出呢(编译器不能保证老爷子不干蠢事,把目标数组溢出到源数组去重叠覆盖。),结构能程序溢出吗?——结构名不是指针,老爷子玩一个试试?给咱见识见识。1,000银子随时伺候。
什么还没搞清就来给别人讲课。
“要给人一杯水,自己先要有一桶水。”
自己先把自己装满再来吧。
、、、、 |