冰激凌太烫 发表于 2020-3-22 19:49:53

大佬们,能帮我看看我代码这样的解释是否正确(数组指针)

#include <stdio.h>
int main()
{      
      int temp ={1,2,3,4,5};
      int (*p1) = &temp;//整个数组的地址
    int i;
   
      for(i =0;i < 5;i++)
      {
         printf("%d\n",*(*p1+i));/**p1是数组temp中第1个元素的地址 *p1+i是数组temp中第i+1个元素的地址
                                       *(*p1+i)是数组temp中第i+1个元素的地址的地址,即为数组temp中第i+1个元素的值   */
      }

    return 0;
}

sunrise085 发表于 2020-3-22 21:14:18

本帖最后由 sunrise085 于 2020-3-22 22:22 编辑

前两天有个人提问了和你一样的问题。
我在那个帖子中讲的很详细。在那个帖子二楼和四楼,应该能帮你解惑
你可以看看。

4goodworld 发表于 2020-3-22 21:41:33

   printf("%d\n",*(*p1+i));/*(*p1)是数组temp中第1个元素的地址 (*p1+i)是数组temp中第i+1个元素的地址
                                       *(*p1+i)是从数组temp中第i+1个元素的地址上取出的地址上取值,即为数组temp中第i+1个元素的值   */
我个人认为,你理解的是对的,表述可能需要再严谨些,哈哈

冰激凌太烫 发表于 2020-3-22 22:42:06

4goodworld 发表于 2020-3-22 21:41
printf("%d\n",*(*p1+i));/*(*p1)是数组temp中第1个元素的地址 (*p1+i)是数组temp中第i+1个元素的地 ...

好的 谢谢大佬{:10_298:}

4goodworld 发表于 2020-3-22 23:00:09

冰激凌太烫 发表于 2020-3-22 22:42
好的 谢谢大佬

我不是大佬,互相学习、共同进步

冰激凌太烫 发表于 2020-3-23 20:38:17

sunrise085 发表于 2020-3-22 21:14
前两天有个人提问了和你一样的问题。
我在那个帖子中讲的很详细。在那个帖子二楼和四楼,应该能帮你解惑
...

谢谢哥,但是你自己写的那个代码有一行不太对:
int (*p2)= &temp;(这个是你写的)应该是不加&的,temp本身就是去二维数组中的第一行所有元素的地址了,就不需要再加取址符了,你看这样对吗

sunrise085 发表于 2020-3-23 20:59:57

冰激凌太烫 发表于 2020-3-23 20:38
谢谢哥,但是你自己写的那个代码有一行不太对:
int (*p2)= &temp;(这个是你写的)应该是不加&的,t ...

temp是个二维数组。
&temp是整个数组的首地址(也叫数组起始地址) (类型为 int(*) )
&temp是第1行的首地址(二维数组每一行相当于一个一维数组)(类型为 int(*))
&temp是数组中第一个元素的地址(类型为 int*)
temp是数组首元素的的首地址( 在做左值时为类型为int,为二维数组数组名 , 在做右值时类型为 int(*) )
temp是第一行元素的首地址(做左值时为类型为int, 相当于一维数组数组名 , 做右值时类型为 int*)

&temp ,temp , temp , &temp , &temp 的值相等

冰激凌太烫 发表于 2020-3-23 21:08:46

sunrise085 发表于 2020-3-23 20:59
temp是个二维数组。
&temp是整个数组的首地址(也叫数组起始地址) (类型为 int(*) )
&temp是第 ...

temp是整个数组的首地址(也叫数组起始地址)
而&temp是整个数组的地址吧,这句话是小甲鱼讲的难道他当时候口误嘛
还有就是那个代码如果加上&,我在vc++6.0是运行不了的

sunrise085 发表于 2020-3-23 21:17:24

本帖最后由 sunrise085 于 2020-3-23 21:29 编辑

冰激凌太烫 发表于 2020-3-23 21:08
temp是整个数组的首地址(也叫数组起始地址)
而&temp是整个数组的地址吧,这句话是小甲鱼讲的难道他当时 ...

哦哦,可能吧。不同的编译器是有所差异。
最开始的时候,我没太关注这个写法。我也是从上个帖子的程序中复制后修改的。你的这个帖子中不也是这样写的么?

冰激凌太烫 发表于 2020-3-23 21:23:16

sunrise085 发表于 2020-3-23 21:17
哦哦,可能吧。不同的编译器是有所差异。
最开始的时候,我没太挂住这个写法。我也是从闪哥帖子的程序中 ...

我是大一的 哥 最近开始恶补C语言还没说毕业{:10_266:}

冰激凌太烫 发表于 2020-3-23 21:24:27

sunrise085 发表于 2020-3-23 21:17
哦哦,可能吧。不同的编译器是有所差异。
最开始的时候,我没太挂住这个写法。我也是从闪哥帖子的程序中 ...

我刚才又去看了一遍指针和二维数组那节课视频,小甲鱼讲的没有问题。
int (*p2)= &temp这行代码确实不需要加&{:10_298:}

sunrise085 发表于 2020-3-23 21:29:21

冰激凌太烫 发表于 2020-3-23 21:23
我是大一的 哥 最近开始恶补C语言还没说毕业

不好意思,手快,打错字了
页: [1]
查看完整版本: 大佬们,能帮我看看我代码这样的解释是否正确(数组指针)