鱼C论坛

 找回密码
 立即注册
查看: 2464|回复: 12

[已解决]关于二维数组

[复制链接]
发表于 2019-1-27 23:19:09 | 显示全部楼层
Y-Frank 发表于 2019-1-24 22:13
二维数组表示形式                                                       含义                                 ...

A选项不对吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-1-29 21:21:04 | 显示全部楼层
Y-Frank 发表于 2019-1-28 00:49
不对,
需要改成
p=&s[0][0]

     哦,我明白了,是因为指向的级别不同。
     s[3][10]是一个二维数组,而*p是一级指针,直接指向s[0][0]就是越级,所以p不能直接通过s指向s[0][0],只能指向s[0].若想要指向s[0][0],则需要一个二级指针**q,令p=s[0],q=&p就可以了,或者也可以直接p=&s[0][0],反正就是不能直接通过指向上一级数组就指向下一级。
     由于数组的第一个元素比较特别,s,s[0],s[0][0]都是相等的,所以会有一定的迷惑性,如p=s,由于s是一个二维数组,所以p并没有指向具体的元素s[0][0],而是指向了一个一维数组s[0],但它们的地址是相等的,所以这并没有影响到p的值。如果举一个一般情况,如s[0][3],想要指向这个元素,就得p=*(s+0)+3,而指向s[0][0],其实就是p=*(s+0)+0,都是经过一定的变化才能得到,只不过+0就相当于没加一样。

顺带一提,我之前一直用vc++6.0写C语言,这里,写成p=s不但不会出错,还可以正确地得到s[0][0]的地址,但会有一处警告:
                             'char *' differs in levels of indirection from 'char (*)[10]'
                              ‘char*‘与‘char(*)[10]’的间接级别不同

最近一直在学Python,c语言有些忘了,经过这一次,总算想起来了,感谢你这么耐心的回答我的问题
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-24 03:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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