A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. int a[]={1,2,3,4,5,6,7,8,9,10,11,12}, *p[3], m;
  2. for ( m=0; m<3; m++) p[m]=&a[m*4];
  3. printf("%d\n", p[2][3]);
  4. -----------------------------
  5. 12
  6. Program ended with exit code: 0
复制代码


p不是一维指针数组么,为什么可以用p[2][3] 这种形式去访问所存地址后3的变量啊

4 个回复

倒序浏览
这个真的没有见过,明天我问问老师吧!
回复 使用道具 举报
1、*p[3] 结合上下代码,可以先把这个看成是一个二维指针数组,表示为*p[3]={a[0],a[1],a[2]};
2、for ( m=0; m<3; m++) p[m]=&a[m*4];简单理解就是,m可以取0 、1、  2三个值,也就是说
p[0]=&a[0],p[1]=&a[4],p[0]=&a[8].由数组a可以算出a[0]、a[4]、a[8]的值分别为0、5、9,所以
*p[3]={a[0],a[1],a[2]}的a[0]、a[1]、a[2]分别对应0、5、9,也就是二维数组每一行的值的首地址。
3、这样分析下来,*p[3] = {{1、2、3、4}、{5、6、7、8}、{9、10、11、12}},所以*p[2][3]所
指向的就是下标为行为2,列为3的值,也就是  12 了。
回复 使用道具 举报
学习学习
回复 使用道具 举报
学习围观......
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马