Chinaunix首页 | 论坛 | 博客
  • 博客访问: 75489
  • 博文数量: 27
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-07 16:56
文章分类

全部博文(27)

文章存档

2021年(4)

2020年(13)

2019年(10)

我的朋友
最近访客

分类: C/C++

2019-01-10 11:55:47

我们知道char array[]=”abcdef”; array是数组的首地址,
  那么在二维数组中array当然也是数组的首地址,
  看看这个定义char Array[][3] ={“ab“,“cd“,“ef“};
  怎么知道的呢?定义这样一个数组,在vc调试窗口中
  我们看到:
  Array ---------0x64324234
   |------Array[0]---0x64324234 “ab“
   |------Array[1]---0x64324337 “cd“
   |------Array[2]---0x6432433A “ef”
  已经很明白了,实际编译器是这样实现二维数组的,实际上Array是“一维指针数组“的首地址,其中每一个元素指针都
  对应一个字符串,那么好我们来看看是否可以这样来使用Array二维数组.
  char **pArray = Array;编译器提示出错,怎么办呢?加个(char **)试试,仍然出错,设断看一下pArray的值和Array
  的值是相等的,但我们是否可以象使用Array[i]那样来同样输出字符串呢?很明显是不行的,编译器不会把
  pArray+i处理成pArray+i*3寻找到第i个指针的地址,而只是简单的加了一个i.这说明编译器只做了很简单的将地址值赋给
  了pArray,而它实际没有任何意义.我们不能用它来访问任何数据.很奇怪吗?
  再来看看这样定义char *p[] = {“ab“, “cd“, “ef“};定义了一个指针数组.char **sp = p;这样的用法经常看到,为什么这样
  就可以使用sp[i]来访问字符串了呢,的确编译器在编译的时候识别出了sp是一个指向一维数组的指针的
  指针,那么我们就可以把它做为数组名来操纵整个数组了,c神奇的地方或者说精华的地方就在这里了,希望
  这篇文章对那些对指针或二级指针有疑惑的朋友能够有所帮助
阅读(2652) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~