|
第四章 令人震惊的事实:数组和指针并不相同
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 还有些问题,关于基础的c,比如const,volalite 的具体的意义,sizeof 等的意思? 还有就是extern 的问题,在c里可以不说明,但是在c++里为什么就必须说明呢?因为..... 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 错误的说法:“数组定义等于指针的外部声明” 为什么人们认为指针和数组始终应该是可以互换的呢?答案是对数组的引用总是可以写出对指针的引用,而且 确实存在一种指针和数组的定义完全相同的上下文环境。不幸的是这只是一种极为普通的用法,而并非所有的 情况下都是如此。
回顾两个术语: 定义: 只能够出现在一个地方 确定对象的类型并分配内存,用于创建新的对象 声明: 可以多次出现 描述对象的类,用于指代其它地方定义的对象
小启发 声明相当于普通的声明:它所说明的并非自身,而是描述其他地方创建的对象。 定义相当于特殊的定义:它为对象分配内存 。。。。。。。。。。。。 左值和右值的区别(p83) 左值在编译时可知,右值在运行时可知 可修改的左值(一般的指针)和不可修改的左值(数组名) 。。。。。。。。。。。。 还有一种发生莫名错误的可能——当你“定义为指针,但是以数组方式引用时”(p85) 指针数组的区别: 如果指针有一个下标[I],就把指针的内容叫上I作为地址,从中提取数据。。。。。。
在ANSI C 中,初始化指针是所创建的字符串常量被定义为只读。 与指针相反,由字符串常量初始化的数组是可以修改的。
|