Chinaunix首页 | 论坛 | 博客
  • 博客访问: 188393
  • 博文数量: 49
  • 博客积分: 635
  • 博客等级: 中士
  • 技术积分: 410
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-25 12:58
文章分类

全部博文(49)

文章存档

2012年(9)

2011年(40)

分类: C/C++

2011-08-30 14:33:33

规则1 : 表达式中的数组名(和声明不同)被编译器当作是一个指向该数组第一个元素的指针,但是有例外:
       a,数组作为sizeof()的操作数时,注意,sizeof()并不是函数,而是宏;
       b,使用&操作数取数组的地址,例如:当定义一个数组指针时;
       c,数组是一个字符串常量初始值,注意是个常量。
规则2 : 下标总是与指针的偏移量相同。
规则3 : 在函数参数的声明中,数组名被编译器当作指向该数组第一个元素的指针。

再说说个人堆二维数组和数组指针的理解:
  1. int arr[10] = {0};
  2. int *p;
  3. p = arr;
以上代码无疑是正确的,p为一个指向int类型数据的指针,而arr表示指向数组第一个元素(int类型)的指针,所以,两者是相容的。
  1. int arr[10] = {0};
  2. int (*p)[10];
  3. p = arr; //error
  4. p = &arr; //ok
此时,p为一个指针,指向一个int类型的数组,&arr也是一个指向int类型的数组。
  1. int arr[3][10] = {0};
  2. int *p;
  3. int (*pp)[10];
  4. p = arr[0];
  5. p = &arr[0][0];

  6. pp = arr;
  7. pp = &arr[0];
pp指向的数组,该数组有3个元素,每个元素里面有10个 int型数据,arr[0]指向的数组,包含10个int型数据。所以,如果pp = arr[0]是不对的
阅读(1332) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~