一个Linux C下关于数组操作问题

zfl926 2008-07-08 10:26:09
我在linux下,声明一个int i[0]的数组,然后对于i[0],i[1]分别进行复值,我想问一下,这个时候i[0]和i[1]的内存地址分别指向哪里?int i[0]有什么意义?一下是代码的部分片断:

void test()
{
....
int i[0],tmp;
i[0] = tmp;
i[1] = tmp;


....
}
...全文
194 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
george3038 2008-07-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 linaxing 的回复:]
int i[0]应该等同于int *i吧。
i[0]和i[1]地址无意义,因为你并没有为这个数组分配空间。
[/Quote]

int i[0]不等同于int *i,二者在栈上的占用空间都不一样。

int i[0]在栈上占用0字节空间,只要操作必然越界。int *i在栈上占用指针大小空间(一般为4字节)。
linaxing 2008-07-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zfl926 的回复:]
谢谢楼上的回答,但是现在于如果我没有指定这个数组的内存,它会不会指向一个已经被别的指针所引用的内存呢?
[/Quote]
有这种可能性,但也有可能指向的是一个invalid的地址。但总之这段代码是会导致问题的。
xinshuow 2008-07-09
  • 打赏
  • 举报
回复
i[0] 等价 *(i+0)
i[1] 等价 *(i+1)

你定义i[0]就相当于定义一个指针i, 它会 指向一个已经被别的指针所引用的内存。

[code]
int i[0];
printf("i[0] = %0x \n", i[0]);
printf("*i = %0x \n", *i ); //与上面打印的结果一样
快乐田伯光 2008-07-09
  • 打赏
  • 举报
回复
写越界,查看一下那段内存的内容就明白啦
zfl926 2008-07-09
  • 打赏
  • 举报
回复
谢谢楼上的回答,但是现在于如果我没有指定这个数组的内存,它会不会指向一个已经被别的指针所引用的内存呢?
linaxing 2008-07-08
  • 打赏
  • 举报
回复
int i[0]应该等同于int *i吧。
i[0]和i[1]地址无意义,因为你并没有为这个数组分配空间。
a50301 2008-07-08
  • 打赏
  • 举报
回复
就是int[0]后面4个字节,i[1] == *(&i[0]+1)

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧