gjfyyds 发表于 2021-12-4 18:09:28

小甲鱼的指针和二维数组


这个int(*p) 是数组array的什么东西啊?

人造人 发表于 2021-12-4 18:18:19

p 是一个指针,指向有3个元素的数组,数组中存储的元素类型是 int

人造人 发表于 2021-12-4 18:57:06

C语言复杂声明解析
https://blog.csdn.net/wangweixaut061/article/details/6549768

gjfyyds 发表于 2021-12-4 20:41:30

人造人 发表于 2021-12-4 18:18
p 是一个指针,指向有3个元素的数组,数组中存储的元素类型是 int

那第一个打印中**(p+1)的意思是不是,*(p+1)指向的是{3,4,5}这个数组的首地址,所以打印出来的值是3

人造人 发表于 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

gjfyyds 发表于 2021-12-4 21:23:59

人造人 发表于 2021-12-4 20:47
*(p+1)指向的是{3,4,5}这个数组的首地址
不对
p + 1 指向 {3,4,5}


那为啥**(p+1)就不能是4or5呢?

人造人 发表于 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

人造人 发表于 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;
}

gjfyyds 发表于 2021-12-4 22:03:37

人造人 发表于 2021-12-4 21:45
这个 *str 得到的为什么不是 '2' or '3' or '4' ?

是不是因为数组的第0号元素的地址代表该数组的地址,所以*str打印出来的就是1

人造人 发表于 2021-12-4 22:32:23

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

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

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

数组的名字是数组第0个元素的地址
str 就是 &str

人造人 发表于 2021-12-4 22:34:15

所以
*str 就是 *&str
取地址然后又解引用,所以就是 str

gjfyyds 发表于 2021-12-5 10:46:20

人造人 发表于 2021-12-4 22:34
所以
*str 就是 *&str
取地址然后又解引用,所以就是 str

懂了,懂了,非常感谢你的指导{:10_275:}
页: [1]
查看完整版本: 小甲鱼的指针和二维数组