荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Version (Who makes history and why), 信区: Program
标  题: Re: 对数组、指针、字符串的理解(更正)
发信站: 荔园晨风BBS站 (Tue Mar 25 18:06:44 2003), 转信

 xiaoxiao对数组的理解是完备的,而且比我的理解更好。

高维数组的双重含义:连续存放的元素集合;指向下一维的指针(不要理解为多级指针


我前面反复强调高维数组名不能理解为指向下一维的指针,理由是:高维数组名的+1或
-1是一个特殊的运算,不同于任何类型的指针运算,跳过的空间是“一行”,即一个数
组,这是“任何”指针运算都不具备的性质。

事实上,上述理由不成立,我忽略了数组指针的概念。
数组指针(不是指针数组)即指向数组的指针,例如:int (*p)[10]; p就是数组指针,
高维数组名可以用来初始化数组指针。
例: int a[10[10];
  int (*p)[10]=a;  //OK, a可理解为指向 int[10] 这样的数组(低一维)的指针。
这样可很好地解释 int a[][]不能做形参(a是指向int[]这样一种数据类型的指针,但
下标大小必须确定),而int a[][10]可以,并可以直接用二维数组名做其实参。

对于输出a,*a ,&a的值都一样的问题,对数组指针而言,p和* p是一样的,都是第一
个实际元素的地址,&p则不一样,xiaoxiao的理解是:&a中a这里取的是数组的另一层含
义:a是一种自定义结构(包含多个元素),取地址即取第一个元素的地址,这样理解是
没有问题的。

这样大家自然会有一些体会:C++的重载和自动类型转化隐含了很多东西。输出 a,*a
,&a的值都一样,但我们并不能认为含义一样,a有双重含义,只不过通过cout表现出来
的是首元素地址;*a中a取了其指针含义;&a中a取了其自定义数据类型含义。用数组名
初始化指针或数组指针时做了自动类型转化,取了其指针含义。

【 在 chiromancy (chiromancy) 的大作中提到: 】
: 1、 数组不是一种真正的(固有)数据类型,而是为方便编程而采用的一种数据结构。
: 2、 数组代表内存中一块连续的空间:数组名是首地址(第一个实际元素),但也代表
: 了全体数组元素,是各单元变量的集合,可用sizeof来求数组的大小。
: 3、 一维数组名可不严格地认为是指针常量:可执行指针的操作;可按地址单元赋值和
: 引用;也可用来初始化同型的指针变量(只是不能对一维数组名赋值)。本质原因是这
: 些操作和同型指针操作是一样的,类型不严格的C++把他们看成兼容类型。
: 4、 高维数组名的+1或-1是一个特殊的运算,不同于任何类型的指针运算,跳过的空间
: 是“一行”,即一个数组(不标准数据类型),这是任何指针运算都不具备的性质,因
: 而无法转化为多级指针。***这是理解数组问题的关键!!!
这样大家自然会有一些体会:C++的重载和自动类型转化隐含了很多东西。输出 a,*a
,&a的值都一样,但我们并不能认为含义一样,a有双重含义,只不过通过cout表现出来
的是首元素地址;*a中a取了其指针含义;&a中a取了其自定义数据类型含义。用数组名
初始化指针或数组指针时做了自动类型转化,取了其指针含义。



--
                      *
          *                                  *
                          *             *
                      no more to say
                  ★     just wish you   ★
                            good luck

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.1.50]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店