1613551 发表于 2022-5-10 18:34:25

关于指针的问题

没看懂第六行加个int*有什么用,不是本来就是指向整形的指针了吗?
#include <stdio.h>

int main()
{
      int array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
      int *p = (int *)(&array + 1);

      printf("%d\n", *(p - 6));

      return 0;
}

风车呼呼呼 发表于 2022-5-10 18:48:18

本帖最后由 风车呼呼呼 于 2022-5-10 19:10 编辑

看岔了,楼下正解

人造人 发表于 2022-5-10 19:06:58

不是指向整形的指针,是指向有10个元素的数组的指针
&array + 1 的类型不是 int *
是 int (*)
地址的值是一样,但是类型不一样
一个是 int *,另一个是 int (*)

人造人 发表于 2022-5-10 19:13:09

你需要这篇文章

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

1613551 发表于 2022-5-11 15:50:41

人造人 发表于 2022-5-10 19:13
你需要这篇文章

C语言复杂声明解析


讲真...感觉自己水平不够这篇文章没看懂

1613551 发表于 2022-5-11 15:52:42

人造人 发表于 2022-5-10 19:06
不是指向整形的指针,是指向有10个元素的数组的指针
&array + 1 的类型不是 int *
是 int (*)


{:10_266:}这个也没能读懂,还是没看出 int(*)的作用

1613551 发表于 2022-5-11 15:55:43

本帖最后由 1613551 于 2022-5-11 16:07 编辑

人造人 发表于 2022-5-10 19:06
不是指向整形的指针,是指向有10个元素的数组的指针
&array + 1 的类型不是 int *
是 int (*)


{:10_266:}感谢大佬抽空解答等我学到后面再回过头来看

1613551 发表于 2022-5-11 16:07:11

我看了小甲鱼的解释,其他的都看懂了,但是我还是没懂小甲鱼说的 (int *) 将其强制转换为一个整型地址(指针),这样写的话,int *p = (int *)(&array + 1),就等于p是指向array + 1也就是int array这个地址吗

1613551 发表于 2022-5-11 16:19:00

为什么一个是array一个是array,但是都是4,不是从0开始算吗?array=0 array=1 array=2 array=3 array=4 那应该array=5啊?

#include <stdio.h>

int main()
{
      int array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
      int *p = (int *)(&array + 1);

      printf("%d\n", *(p - 6));

      return 0;
}

#include <stdio.h>

int main()
{
      int array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
      int (*p) = &array;

      printf("%d\n", *(*(p+1)-6));

      return 0;
}

1613551 发表于 2022-5-11 16:20:02

救命,我可能陷入了循环

人造人 发表于 2022-5-11 16:20:13

1613551 发表于 2022-5-11 16:07
我看了小甲鱼的解释,其他的都看懂了,但是我还是没懂小甲鱼说的 (int *) 将其强制转换为一个整型地址(指 ...

array有10个元素,索引是0~9
&array + 1 是指向 array,不是 array

1613551 发表于 2022-5-11 16:22:10

人造人 发表于 2022-5-11 16:20
array有10个元素,索引是0~9
&array + 1 是指向 array,不是 array

不是,我array的意思是,超过这个数组的范围了,这个数组一共只有10个元素,而%aray+1就是这个数组最后一位+1也就是array+1,所以是array

人造人 发表于 2022-5-11 16:25:10

1613551 发表于 2022-5-11 16:22
不是,我array的意思是,超过这个数组的范围了,这个数组一共只有10个元素,而%aray+1就是这个数组最 ...

???
什么?
array这个数组有几个元素?
10个吧?
array 是最后一个元素吧?
所以,变量p是指向 array 的,有问题吗?

1613551 发表于 2022-5-11 16:27:45

人造人 发表于 2022-5-11 16:25
???
什么?
array这个数组有几个元素?


{:10_254:}不好意思看错了

1613551 发表于 2022-5-11 16:28:47

人造人 发表于 2022-5-11 16:25
???
什么?
array这个数组有几个元素?


{:10_254:}那大佬可以解释一下9楼的问题吗

1613551 发表于 2022-5-11 16:31:35

人造人 发表于 2022-5-11 16:25
???
什么?
array这个数组有几个元素?


那个应该是小甲鱼写错了吧,按照你的逻辑11位是array【10】的话

人造人 发表于 2022-5-11 16:36:23

1613551 发表于 2022-5-11 16:31
那个应该是小甲鱼写错了吧,按照你的逻辑11位是array【10】的话

对,答案的确是写错了

1613551 发表于 2022-5-11 16:38:30

人造人 发表于 2022-5-11 16:36
对,答案的确是写错了

{:10_266:}好的
页: [1]
查看完整版本: 关于指针的问题