鱼C论坛

 找回密码
 立即注册
查看: 1084|回复: 4

[已解决]二维数组的问题

[复制链接]
发表于 2020-3-5 15:18:21 | 显示全部楼层 |阅读模式
5鱼币
int a[3][3]={1,2,3,4,5,6,7,8,9};
printf("*a[1][0]:%p\n",*(a+1));
printf("*a[1][0]:%p\n",(a+1));
为什么这两个值是一样的?
我知道a[1]表示的是a[1]表示的是第二行的地址。
1.那为什我直接打印a+1的地址和*(a+1)会一样呢?这里的*难道不是取值的意思吗?
因为我自己测试了a[1][0]和a+1的地址是一样的,所以我认为*(a+1)就应该是a[1][0]的值啊
求大佬教一下
最佳答案
2020-3-5 15:18:22
(a+1)表示a[1]这一行的首地址,可以把这一行看成一个一维数组,(a+1)看成是一个数组名,这样就好理解了。

最佳答案

查看完整内容

(a+1)表示a[1]这一行的首地址,可以把这一行看成一个一维数组,(a+1)看成是一个数组名,这样就好理解了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-5 15:18:22 | 显示全部楼层    本楼为最佳答案   
(a+1)表示a[1]这一行的首地址,可以把这一行看成一个一维数组,(a+1)看成是一个数组名,这样就好理解了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-5 15:21:48 | 显示全部楼层
简单来说就是我想知道为什么*(a+1)表示的是地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-5 16:39:31 | 显示全部楼层
好的我自己搞懂了
虽然a+1表示的是a[1][0]的地址但是他不等于a[1][0]他是等于整个第二行如果再加1会等于第三行,只是因为每一行开头的地址都等于a[第几行][0]
但是*(a+1)他表示的就是a[1][0]的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-5 18:34:58 | 显示全部楼层
二位数组的定义过程:
  1. int n = 3, m = 3;
  2. int **a;
  3. a = (int **)malloc(sizeof(int *) * n);
  4. for (int i = 0; i < n; i++)
  5. {
  6. a[i] = (int *)malloc(sizeof(int) * m);
  7. }
复制代码

所以(a + 1)和*(a + 1)都是指针(因为二位数组名实质上是一个指向指针的指针,也就是两层指针)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 06:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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