Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2349736
  • 博文数量: 527
  • 博客积分: 10343
  • 博客等级: 上将
  • 技术积分: 5565
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-26 23:05
文章分类

全部博文(527)

文章存档

2014年(4)

2012年(13)

2011年(19)

2010年(91)

2009年(136)

2008年(142)

2007年(80)

2006年(29)

2005年(13)

我的朋友

分类: C/C++

2010-08-13 14:58:12

我相信这一点对于现今的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是一个指向数组(整个数组作为一个整体)的指针, 而不是指向数组第一个元素的指针.

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

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

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


阅读(1291) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~