文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>C陷阱与缺陷 读后: 数组名与指针的区别

C陷阱与缺陷 读后: 数组名与指针的区别

时间:2010-08-13  来源:slimzhao

我相信这一点对于现今的ANSI C不再完全正确.

作者在第
第3章 语义"陷阱"
第3.1 节
中文版第35页中有一段说:

   如果calendar 不是用于 sizeof操作数, 而是用于其他的场合, 那么calendar总是被转换成一个指向calendar数组的起始元素的指针.

其中提到的calendar在稍前被定义成:
int calendar[12][31];

   这段文字等于说 数组与指针表现不同的唯一场合就是作为sizeof的操作数.

再下面的第35页有一段说的更清楚:

   除了a被用作运算符sizeof的参数这一情形, 在其他所有的情形中数组名a都代表指向数组a中下标为0的元素的指针....


现今的ANSI C是支持"数组的地址"这一概念的:

  int a[10];

  int (*p)[10] = &a;

  其中p是一个指向数组(整个数组作为一个整体)的指针, 而不是指向数组第一个元素的指针.

  我第一次看到总结指针与数组不同的地方是<<C专家编程>>, 作者说共有这2种情况.

作者在前面一段中这样说:
   p = &a;
   这种写法在ANSI C中是非法的, 因为&a是一个指向数组的指针, 而p是一个指向整形变量的指针, 它们的类型不匹配. 大多数早期版本的C语言实现中, 并没有所谓"数组的地址"这一概念.

  不知道在<<C陷阱与缺陷>>出版后这么多年里有没有人向Andrw指出过这一点.


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载