一点疑惑~

afgkidy 2008-06-01 09:25:04
extern int *array;

int main()
{
array[0] = 1;
return 0;
}

int array[5] = {0};

请详解为什么出错,谢谢!!!
...全文
177 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
afgkidy 2008-06-03
  • 打赏
  • 举报
回复
终于明白了,分享下,应该是编译器没有解决的问题:
因为指针占4 个字节,在编译的时候并且也找到了array 变量,所以,test1 中的array 认为地址就在test2 的array 处,且开始的4 个字节就是test1 中array 的值,而test2 中array 数组已经赋值为0,即开始的4 个字节全为0, 所以test1 中array 就是一个空指针,所以出错了。
afgkidy 2008-06-01
  • 打赏
  • 举报
回复
由于在test1 中声明了int 型的array 指针,而在test2 中定义array 不是一个指针,而是一个int 型数组,数组名也可以当指针使用,所以我认为test1 中指针arry 的值应该是test2 中数组的地址,即数组名“array”。所以main 函数中“array[0] = 1”,我认为是对数组进行操作,即让test2 中数组的第一个元素赋值为1 。
但是实际情况却不是上面我说的那样~请提示我上面哪里分析错了,谢谢!!!
大前置 2008-06-01
  • 打赏
  • 举报
回复
test2.cpp int array[5];是全局变量指针。= {0}相当于置为NULL

extern int *array; 就是调用全局变量指针了。*array 与array[5]是一样的.
array在test2.cpp原来就是为NULL的,在test1.cpp肯定要申请内存才能使用了


afgkidy 2008-06-01
  • 打赏
  • 举报
回复
书上说明是:test2 中array 数组5 个元素被初始化为0,进行连接后,test1 中的int 指针array 的值就是test2 中数组元素array[0] 的值,也就是“0”----空指针!所以自然导致错误。

我不明白的是“test1 中的int 指针array 的值就是test2 中数组元素array[0] 的值”这句话。
afgkidy 2008-06-01
  • 打赏
  • 举报
回复
补充说明:

//test1.cpp
extern int *array;
int main()
{
array[0] = 1;
return 0;
}

//test2.cpp
int array[5] = {0};
大前置 2008-06-01
  • 打赏
  • 举报
回复
没有申请内存空间
array = (int *)malloc(sizeof(int)*5);
zjw6861982 2008-06-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 langhua0001 的回复:]
说明数组和指针不同
[/Quote]
GreenCircle 2008-06-01
  • 打赏
  • 举报
回复
没有动态分配内存吧
langhua0001 2008-06-01
  • 打赏
  • 举报
回复
说明数组和指针不同
afgkidy 2008-06-01
  • 打赏
  • 举报
回复
抢坐真快啊~
code-artist 2008-06-01
  • 打赏
  • 举报
回复
在我之前 你在摩天大楼的顶部
承影 2008-06-01
  • 打赏
  • 举报
回复
test1 中把array声明为指针,则array[0] = 1; 的过程是:先取得array中的值(这里为array[0]的值)0(test2中已经初始化为0), 然后加上偏移量0,得到元素的存储地址,为0(即NULL),所以对地址为零的区域赋值将导致错误。
CedarDiao 2008-06-01
  • 打赏
  • 举报
回复
没错的,我在VC6下通过了。。。
估计是你没有把两个文件一起连接
afgkidy 2008-06-01
  • 打赏
  • 举报
回复
怎么都没人呢,是不是躲余震去了?

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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