关于C语言中指针引用二维数组一些问题

假设定义一个二维数组intarr[3][3]={1,2,3,4,5,6,7,8,9};那么printf("\n%p",arr+1);printf("\n%p",*arr+... 假设定义一个二维数组 int arr[3][3] = {1,2,3,4,5,6,7,8,9};
那么
printf("\n%p",arr+1);
printf("\n%p",*arr+1);
printf("\n%p",&arr+1);
下面是打印结果
010BFE0C
010BFE03
010BFE24
在数组中数组名本来不就是数组的首地址嘛*arr+1(如果说*arr是指针的,那么这个指针从来没有定义过啊)取出来的为什么不是数组的内容而还是地址呢,还有这里的arr+1,&arr+1原理上的区别在哪里。
展开
 我来答
雨诺与诺
2015-01-12 · TA获得超过1213个赞
知道小有建树答主
回答量:2179
采纳率:33%
帮助的人:679万
展开全部
您好,int arr【3】【3】,相当于int *arr【3】,即定义了一个指针数组,arr+1就是arr【1】【0】的地址,*arr+1,先计算*arr,就是arr【0】【0】的地址,然后加1,就是arr【0】【1】,所以和上一个地址相差了2*4个字节,就是8,最好一个,先得到arr的地址,再+1.这个是在原来用掉的内存后面加了一个char型的空间存放指针,1个字节,所以是010BFE24。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式