鱼C论坛

 找回密码
 立即注册
查看: 2474|回复: 3

求解答为什么会出现这种情况

[复制链接]
发表于 2019-8-7 14:43:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<stdlib.h>
int main()

{
        int temp[4][5] = {

                {0,1,2,3,4},
                {5,6,7,8,9},
                {10,11,12,13,14},
                {15,16,17,18,19}
        };
        int(*p)[5]=temp;

        printf("%p\n",p+1);            //有没有*符号,打印的地址一样,都是temp[1][0]地址
        printf("%p\n", *(p+1));
        printf("%p\n", temp+1);
        printf("%p\n", *(temp + 1));
        printf("%p\n", &temp[1][0]);
        system("pause");
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-7 16:21:48 | 显示全部楼层
因为它是二维数组,每一行的第一个元素都可以理解为是一个数组的首地址;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-7 16:26:07 | 显示全部楼层
数组名就是首元素地址,第0个p=0,然后p+1就是第1个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-7 21:38:14 | 显示全部楼层
二维数组由一维数组组成,要求特定二维数组的元素,先要找到其所在的一维数组,再找到其在此一维数组中的位置。
举个简单的例子:
比如说要找二维数组 a[3][4] 中的元素 a[2][3];
则先找到一维数组 a[2];
再找到其在一维数组a[2]中的位置 a[2][3];
所以说,二维数组是一维指针数组的特殊情况:
该指针数组每个指针指向一个一维数组;
并且每个指针都是指针常量,其值不可修改;
所以你所写的例子都是指同一个常量指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-4 03:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表