C 语言 指针问题

2017-01-30 20:02:08 +08:00
 cio
#include <stdio.h>

const int MAX = 3;

int main ()
{
   int  var[] = {10, 100, 200};
   int  i, *ptr;

   /* 指针中的数组地址 */
   ptr = var;
   for ( i = 0; i < MAX; i++)
   {

      printf("存储地址: var[%d] = %x\n", i, ptr );
      printf("存储值: var[%d] = %d\n", i, *ptr );

      /* 移动到下一个位置 */
      ptr++;
   }
   return 0;
}

其中的 ptr = var; 这里是把数组 var 的第一个值得地址赋值给了 ptr 指针吗? 那可不可以这样写 ptr = &var[0];

刚学。可能问的问题弱智了点,还是期望有人解惑..

3372 次点击
所在节点    C
31 条回复
am241
2017-01-30 20:06:06 +08:00
可以这样写,不过没必要
stevezjb
2017-01-30 20:07:56 +08:00
var=&var[0]
liyvhg
2017-01-30 20:11:11 +08:00
这两种写法是等价的
LGA1150
2017-01-30 20:17:08 +08:00
一个引用&,一个解引用[],正好抵消
firebroo
2017-01-30 20:22:38 +08:00
可以的。
cio
2017-01-30 20:26:02 +08:00
谢谢!理解了。我再去好好看看书..
Lonely
2017-01-30 22:20:19 +08:00
理一下顺序就是&(var[0])
sfqtsh
2017-01-30 22:25:18 +08:00
var 的类型是 int [3],是个数组类型, ptr 类型是 int*,是个指针类型,前者可隐含向后者转换,指向其首地址。
var[0]类型是 int ,所以&var[0]类型就是 int*。
owt5008137
2017-01-30 22:25:28 +08:00
可以,一样的
NvSylvanas
2017-01-30 22:50:32 +08:00
可以
lzhCoooder
2017-01-30 23:18:02 +08:00
数组名代表数组首地址,这应该是很重要的一个概念,记住它就不会有疑惑了
klesh
2017-01-31 00:16:37 +08:00
看的什么书?合格的入门级会直接给多第二种写法,并说明是等效的。
msg7086
2017-01-31 02:17:53 +08:00
a[b] 就是 *(a+b) 的语法糖。
&a[b] 自然就是 (a+b) 。
b 是 0 的情况下,&a[0] 就是 (a+0) 也就是 a 了。
justyy
2017-01-31 02:21:02 +08:00
a[b] 可以写成 b[a]
424778940
2017-01-31 02:51:44 +08:00
数组的名字所指向的地址就是数组第一个元素的地址 所以你直接用名字和取第一个元素的地址 结果应该是一样的
ryd994
2017-01-31 08:57:11 +08:00
学深点你就知道 a[i]==*(a+i)
所以可以用这种办法直接偏移数组
ryd994
2017-01-31 08:59:28 +08:00
推荐你再零长度数组 https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
会感觉打开了新世界的大门
然后乱飞指针无法自拔,直到写出自己都看不懂的代码为止

我就是这么过来的
ryd994
2017-01-31 09:01:10 +08:00
@justyy 不一定,如果 a 和 b 不是一个类型呢?
zhujinliang
2017-01-31 10:04:31 +08:00
我觉得&a[n]写法更好,因为 a 的类型不确定,用数组的形式编译器会自动决定偏移多少
自己处理指针除非有特殊用途
introom
2017-01-31 10:22:58 +08:00
@ryd994 a,b 当然不是一个类型

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

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

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

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

© 2021 V2EX