C语言,#include #define f printf main(){\x05int a[3][4]={0,1,2,

问题描述:

C语言,
#include
#define f printf
main()
{
\x05int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
\x05f("%d\n",a);
\x05f("%d\n",*a);
\x05f("%d\n",a[0]);
\x05f("%d\n",&a[0]);
\x05f("%d\n\n",&a[0][0]);
\x05
\x05f("%d\n",a+1);
\x05f("%d\n",*(a+1));
\x05f("%d\n",a[1]);
\x05f("%d\n",&a[1]);
\x05f("%d\n\n",&a[1][0]);
\x05
\x05f("%d\n",a+2);
\x05f("%d\n",*(a+2));
\x05f("%d\n",a[2]);
\x05f("%d\n",&a[2]);
\x05f("%d\n\n",&a[2][0]);
\x05
\x05f("%d\n",a[1]+1);
\x05f("%d\n\n",*(a+1)+1);
\x05
\x05f("%d,%d\n",*(a[1]+1),*(*(a+1)+1));
}
怎么有几行带*运算符的还是输出地址,只有最后一行出去的是值,其他都是地址,意思是对于二维来说只要不指明准确的行和列都输出某行的首地址?搞晕了似懂非懂的,求教.
1个回答 分类:综合 2014-10-26

问题解答:

我来补答
f("%d\n",a);
f("%d\n",*a);
f("%d\n",a[0]);
f("%d\n",&a[0]);
f("%d\n\n",&a[0][0]); //都是首地址
f("%d\n",a+1);
f("%d\n",*(a+1));
f("%d\n",a[1]);
f("%d\n",&a[1]);
f("%d\n\n",&a[1][0]);//都是第二行元素的地址
f("%d\n",a+2);
f("%d\n",*(a+2));
f("%d\n",a[2]);
f("%d\n",&a[2]);
f("%d\n\n",&a[2][0]);//都是第三行元素的地址
f("%d\n",a[1]+1);
f("%d\n\n",*(a+1)+1);//都是第二行第二列的地址
f("%d,%d\n",*(a[1]+1),*(*(a+1)+1));//第二行第二列的内容
你得去看看书 二维指针和一维指针所指向的地址和内容比较容易搞混的 不是带*的就一定是指向内容 比如*(a+i)在一维里表示a[i]的内容 但是在二维里就是表示&a[i][0]是个地址
二维的内容一般都是*(*(a+i)+j)表示
我当初也看了老半天才知道 你看看这些输出结果 找找规律 自己归纳归纳哈
再问: 额,别这么模糊啊,就说明一下二维里用了*号但是仍然输出地址的话,这个*号是不是就不是“取内容运算符了”,那这个*表示什么
再答: 你有书么?看看那个概念 自己琢磨下 挺简单的 一维和二维不能用一个思维去考虑 在二维里*(a+i)只是a[i]的另外一种表达方式 都是表示的地址 因为在二维里有行和列 所以在二维里 a+i不是指向具体存储内容 而是表示行 你记住啊 a[i] a+i *(a+i) &a[i][0] &a[0]是相等的都是表示这一行的地址 这样说你明白了么 总之以后还会碰到很多东西不要用一种思维去考虑
再问: 理解倒是理解了,*(a+i)这种类型因为没指明具体行和列所以即使用*取内容,取出来的都是地址,因为这里a+i的内容就是地址,也可以理解为指针,就像a[][]一样,没指明具体元素位置都是指地址,也就是说*(a+i)就是指向指针的指针,这样理解可以吧~?额,那些书很多坑爹的,我看到这部分内容的时候其实已经明白了,但就是看那些书看的又晕了,谢谢
 
 
展开全文阅读
剩余:2000
下一页:奇偶性的应用。