c 语言指针问题 1

2018-03-02 16:35:21 +08:00
 thomaswang
  int a;
  int *p = &a;
  int a[5];
  int *p = a;

对指针 p 赋值的时候,为什么一个是对 a 取地址,一个是变量 a 就行了

1537 次点击
所在节点    问与答
13 条回复
dtgio
2018-03-02 16:38:38 +08:00
因为第一个 a 是 int,另一个 a 是 int[]
(。)
Alchemistxxd
2018-03-02 16:43:01 +08:00
因为第二个的内存布局是 int *a
hxndg
2018-03-02 16:45:33 +08:00
你需要首先解释变量 a 是个什么东西,
然后再考虑你问的这个问题。
xrui
2018-03-02 16:45:46 +08:00
数组名是数组首元素的地址
johnniang
2018-03-02 16:46:39 +08:00
第二个 a 本身就是地址
thomaswang
2018-03-02 16:47:45 +08:00
@xrui 怎么你一说,我就懂了呢
xrui
2018-03-02 16:51:56 +08:00
@thomaswang 我也就书上概念背得熟而已😂多看看书就好啦~
aheadlead
2018-03-02 16:54:20 +08:00
@thomaswang 因为他说的对而且准确
hxndg
2018-03-02 17:39:12 +08:00
@thomaswang
如果前面的你看不懂,你可能需要去看一些基础的 c 教程,或者拿 gdb 追一边代码
bibizhang
2018-03-02 17:57:35 +08:00
数组名是数组第一个元素的地址,这是王八的屁股-龟腚。
but0n
2018-03-02 22:42:55 +08:00
数组和指针之间有着蜜汁关系, c 语言圣经里有讲过
thomaswang
2018-03-03 00:21:21 +08:00
@but0n 圣经是那本呢
sfqtsh
2018-03-03 00:28:44 +08:00
数组名 a 是个变量,它的类型是数组类型 int [5],并不是指针类型。数组名传递时会 退化 为指针:该指针的类型是数组包含的元素类型,这里是 int ;该指针指向数组的第一个元素。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/434321

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX