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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 jiangenhao 于 2014-4-27 21:49 编辑

下面程序的输出结果是________。

  1. #include "stdio.h"
  2.     main()
  3.     {
  4.         int b[2][3]={1,3,5,7,9,11};
  5.         int *a[2][3];
  6.         int i,j;
  7.         int **p, m;
  8.         for(i=0;i<2;i++)
  9.             for(j=0;j<3;j++)
  10.                 a[i][j]=*(b+i)+j;
  11.         p=a[0];
  12.         for(m=0;m<6;m++)
  13.         {
  14.             printf("%4d", **p);
  15.             p++;
  16.         }
  17.     }
复制代码

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

10 个回复

倒序浏览
结果是 1 3 5 7 9 11
回复 使用道具 举报
为什么呢?帮忙解释下呗
回复 使用道具 举报
gaoxinglei123 来自手机 中级黑马 2014-4-26 08:07:21
板凳
a是一个二维数组里面每个元素都是一个指向整数的指针变量。经过赋值以后a中元素分别b中各个元素的地址。p=a[0]把a[0][0]地址赋值给p则*p就是a[0][0]的值也就是b[0][0]的地址;依此类推
回复 使用道具 举报
图丑了点,但看着应该明白了把?p指向a的地址,a在指向b的地址。
通过*a可以得到1;
通过*p可以获得a存储的内容。
既*(*p)=*a;  所以输出1 3 5 7 9 11

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报 1 0
马凯文 发表于 2014-4-26 10:19
楼上的都回答的不错,我再补充一下,这块忘得一干二净,看了一个小时,终于弄明白了!

其实*(b+i)+j  就是  &b[j],代码就是把b中每项的地址赋给a中每项
就是这句看不懂
为什么*(b+i)+j  就是  &b[j] 能再解释详细些吗
回复 使用道具 举报
jiangenhao 发表于 2014-4-26 23:10
其实*(b+i)+j  就是  &b[j],代码就是把b中每项的地址赋给a中每项
就是这句看不懂
为什么*(b+i)+j  就是   ...

应该是&b[j]吧。
回复 使用道具 举报
本帖最后由 一只小菜鸟 于 2014-4-27 09:02 编辑

为什么 i出不来,&b (i) [j]
  1. int main()
  2. {
  3.     int a = 1;
  4.     int *b = &a;
  5. //    可以写成   一样的原理
  6. //    int *b;
  7. //    b=&a;
  8.     *b = 2;
  9.     printf("a:%d,b:%d",a, *b); //a:2,b:2
  10. }
复制代码



回复 使用道具 举报
明白了  谢谢楼上的大神 我们老师都没讲过 你的技术真牛啊!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马