荔园在线

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

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


发信人: Version (Who makes history and why), 信区: Program
标  题: 对数组、指针、字符串的理解(补充)
发信站: 荔园晨风BBS站 (Tue Mar 25 18:05:36 2003), 站内信件


 1、 数组不是一种真正的(固有)数据类型,而是为方便编程而采用的一种数据结构。

2、 数组代表内存中一块连续的空间:数组名是首地址(第一个实际元素),但也代表
了全体数组元素,是各单元变量的集合,可用sizeof来求数组的大小。

3、 一维数组名可不严格地认为是指针常量:可执行指针的操作;可按地址单元赋值和
引用;也可用来初始化同型的指针变量(只是不能对一维数组名赋值)。本质原因是这
些操作和同型指针操作是一样的,类型不严格的C++把他们看成兼容类型。

4、 高维数组名的+1或-1是一个特殊的运算,不同于任何类型的指针运算,跳过的空间
是“一行”,即一个数组(不标准数据类型),这是任何指针运算都不具备的性质,因
而无法转化为多级指针。***这是理解数组问题的关键!!!

5、 数组传参:这是最重要、也最容易犯错的地方:因为数组名成了真正的指针!!!

a) 形参中的一维数组不能再理解为数组,而必须理解为指针:不能用sizeof求大小;但
可以再赋值(与数组名不一样),这是为避免内容的大量复制而采用的方法。
b) 形参必须是一种真实的数据类型,而多维数组不是一种真正的数据类型,不能用做形
参(可用指针数组或单个指针代替)。
例:int sum2(int array[][],int n1,int n2)  //error!!! array不是指针
int sum3(int *array[],int n1,int n2)    //OK, array此时是指向指针数组的指针
c) 高维数组名总是第一个“真实”元素的地址,用type *转换后可当指针用,也可做实
参(数组的空间总是连续的,可象一维数组一样用。)

6、 const  int* const p:唯一含义是p和*p不能做左值,p是常量,的确不能变化了,
试图通过另外一个指针(指向它的指针,即二级指针)来修改它都是不合法的;*p则可
以随它指向的变量而变(可指向变量,int*到const int*是合法的,反之则不对。指向
一个常量必须是一个常量指针,但常量指针可指变量)

7、 用字符串常量初始化字符数组和字符指针的区别:前者是数组,要另开空间,将DA
TA区中的CONST区中的字符串常量复制过来;后者仅将指针指向CONST区中的字符串常量
,并不复制和另开空间。
另外:无法用字符数组和字符指针来初始化字符数组的原因是:数组必须在编译时知道
大小,分配空间。定义字符指针在编译时只需分配一个指针的空间(4B),用什么初始
化都无关紧要。

8、 if(“abc”==”abc”)在VC中成立,BC中不成立,尽可能用strcmp来比较。
(VC对==进行了重载,将地址比较变为内容比较,如同输出字符指针就是输出字符串一
样。)








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

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


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

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