鱼C论坛

 找回密码
 立即注册
查看: 924|回复: 11

[已解决]小甲鱼的指针和二维数组

[复制链接]
发表于 2021-12-4 18:09:28 | 显示全部楼层 |阅读模式

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

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

x
Inked【C语言】《带你学C带你飞》_哔哩哔哩_bilibili 和另外 3 个页面 - 个人 - Micro.jpg
这个int(*p)[3] 是数组array的什么东西啊?
最佳答案
2021-12-4 20:47:39
gjfyyds 发表于 2021-12-4 20:41
那第一个打印中**(p+1)的意思是不是,*(p+1)指向的是{3,4,5}这个数组的首地址,所以打印出来的值是3

*(p+1)指向的是{3,4,5}这个数组的首地址
不对
p + 1 指向 {3,4,5}
*(p + 1) 就是 {3,4,5}
**(p + 1) 是 3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-4 18:18:19 | 显示全部楼层
p 是一个指针,指向有3个元素的数组,数组中存储的元素类型是 int
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-4 18:57:06 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-4 20:41:30 | 显示全部楼层
人造人 发表于 2021-12-4 18:18
p 是一个指针,指向有3个元素的数组,数组中存储的元素类型是 int

那第一个打印中**(p+1)的意思是不是,*(p+1)指向的是{3,4,5}这个数组的首地址,所以打印出来的值是3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-4 20:47:39 | 显示全部楼层    本楼为最佳答案   
gjfyyds 发表于 2021-12-4 20:41
那第一个打印中**(p+1)的意思是不是,*(p+1)指向的是{3,4,5}这个数组的首地址,所以打印出来的值是3

*(p+1)指向的是{3,4,5}这个数组的首地址
不对
p + 1 指向 {3,4,5}
*(p + 1) 就是 {3,4,5}
**(p + 1) 是 3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-4 21:23:59 | 显示全部楼层
人造人 发表于 2021-12-4 20:47
*(p+1)指向的是{3,4,5}这个数组的首地址
不对
p + 1 指向 {3,4,5}

那为啥**(p+1)就不能是4or5呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-4 21:43:42 | 显示全部楼层
gjfyyds 发表于 2021-12-4 21:23
那为啥**(p+1)就不能是4or5呢?

*(p + 1) 就是 {3,4,5}
数组的名字是数组第0个元素的地址
*(p + 1) 这个就可以看成是数组的名字
这个数组第0个元素是3
对3这个元素的地址解引用,得到的就是3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-4 21:45:41 | 显示全部楼层
gjfyyds 发表于 2021-12-4 21:23
那为啥**(p+1)就不能是4or5呢?

这个 *str 得到的为什么不是 '2' or '3' or '4' ?
#include <stdio.h>

int main(void) {
    char str[] = "1234";
    printf("%c\n", *str);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-4 22:03:37 | 显示全部楼层
人造人 发表于 2021-12-4 21:45
这个 *str 得到的为什么不是 '2' or '3' or '4' ?

是不是因为数组的第0号元素的地址代表该数组的地址,所以*str打印出来的就是1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-4 22:32:23 | 显示全部楼层
gjfyyds 发表于 2021-12-4 22:03
是不是因为数组的第0号元素的地址代表该数组的地址,所以*str打印出来的就是1

不是
数组的名字是数组第0个元素的地址
是数组的名字,不是数组的地址

str 数组的名字
&str 数组的地址

数组的名字是数组第0个元素的地址
str 就是 &str[0]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-4 22:34:15 | 显示全部楼层
所以
*str 就是 *&str[0]
取地址然后又解引用,所以就是 str[0]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-5 10:46:20 | 显示全部楼层
人造人 发表于 2021-12-4 22:34
所以
*str 就是 *&str[0]
取地址然后又解引用,所以就是 str[0]

懂了,懂了,非常感谢你的指导
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 05:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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