Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2339095
  • 博文数量: 168
  • 博客积分: 3184
  • 博客等级: 中校
  • 技术积分: 3959
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-12 18:57
文章存档

2019年(1)

2018年(2)

2017年(3)

2016年(15)

2015年(10)

2014年(60)

2011年(1)

2010年(76)

分类: LINUX

2010-04-03 23:59:59

data_type array[M][N];
data_type *array_p;
 
  在gcc编译器里,如果直接进行赋值——array_p = array;回有指针赋值不匹配警告出现,因为在上面的赋值过程中,其实是将一个二级指针array赋值给array_p。
 
  下面就对一个二维数组名做一个简单的说明,如上定义了一个二维数组后,array[0]、array[1]、array[2]、...array[M-1]都是一个指针,故array可以理解为一个指针数组,即array就是一个二级指针。
 
  很多人使用二维数组的时候会将二维数组当成一位数组来使用,其实这种想法是不对的,例如,*(array+i*4+j)大家以为是在输出第i行j列的元素来,其实不是;当i=0时,上面的操作得到的是第j行的N个元素,而不是一个data_type元素,当i不是0的时候,输出地可能就是我们自己都不知道的东西。但是编译器不会报错,这是因为我们是直接面向地址的操作,不会产生数组下标越界导致的段错误之类的报告,因此在这儿有必要做一个日记。如果有不合适的地方,往各位高手指点。
 
阅读(1828) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

chinaunix网友2010-04-21 20:08:22

array_p=array+0;去除警告 输出第i行第j列可以用 *(*(array_p+i)+j); *(array_p[i]+j); array_p[i][j]; (*(array_p+i))[j]; 当i不是零的时候输出的是4*i+j行的N个元素,只要4*i+j不超过M。