鱼C论坛

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

[已解决]输出二维数组元素的值

[复制链接]
发表于 2020-2-29 21:32:42 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 张世来4610484 于 2020-3-1 18:04 编辑

书上原话“指向整形变量的指针变量ptr只能指向a[i],*(a+i),&a[i][0]等指向列的地址,而不能指向a+i,&a[i]等指向行的地址”
代码如下:输出二维数组元素的值
#include <stdio.h>
void main ()
{
        static int a[3][4]={{2,4,6,8},{10,12,14,16},{18,20,22,24}};
        int (*ptr)[4];
        int i,j;
        ptr=a;
        for(i=0;i<3;i++)
        {
                for(j=0;j<4;j++)
                        printf("%4d",*(*(ptr+i)+j));
                printf("\n");
        }
}
请问ptr=a;这个是不是指向行的地址,而且上面我列举的五个不都是代表一个值吗,
为什么我换成ptr=a[0];或ptr=a[0][0];ptr=*a;这种就不行呢,求解,麻烦详细点,谢谢
最佳答案
2020-3-3 07:20:12
张世来4610484 发表于 2020-3-1 18:14
你没有理解我的意思,我问的是二维数组中,a,a[0],&a[0],*a,&a[0][0]这五个值不是一样的吗,比如说首地址 ...

他们类型不同,相同的地址,但是含义不同
Ptr需要指向整个数组,而不是单个元素。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-29 23:46:56 | 显示全部楼层
int (*ptr)[4]; 数组指针,指向一个有4个int元素的一维数组。
ptr=a; 也就是把二维数组a的地址赋给ptr。也就是a[0]或&a[0]。要清楚的是这里的 a[0]不是一个数组元素值,而是a[3][4]二维数组中第一行 一维数组 a[0][0]-a[0][3]的地址。 所以 *ptr = &a[0]或 *ptr=&a[0][0]。
*(ptr+i) 是第 i 行的地址。*(ptr+i)+j 就是第 i 行 第 j 列的地址。*(*(ptr+i)+j)就是 a[i][j]的元素值了。

只要把 二维数组 a[i][j] 中的 a[i] 看成一个变量,比如说 b, b 是一个4个 int 元素的一维数组。就容易理解了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-1 18:14:48 | 显示全部楼层
chxchxkkk 发表于 2020-2-29 23:46
int (*ptr)[4]; 数组指针,指向一个有4个int元素的一维数组。
ptr=a; 也就是把二维数组a的地址赋给ptr。也 ...

你没有理解我的意思,我问的是二维数组中,a,a[0],&a[0],*a,&a[0][0]这五个值不是一样的吗,比如说首地址a为2000,那么这五个是不是都等于2000,第一个问题是这五个中区分行地址和列地址是依据什么来分的?第二个问题是
 ptr=a;
既然这五个值相等,那么我换成ptr=a[0];会报错,但换成ptr=&a[0];又可以是怎么回事?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 07:20:12 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
张世来4610484 发表于 2020-3-1 18:14
你没有理解我的意思,我问的是二维数组中,a,a[0],&a[0],*a,&a[0][0]这五个值不是一样的吗,比如说首地址 ...

他们类型不同,相同的地址,但是含义不同
Ptr需要指向整个数组,而不是单个元素。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-15 23:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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