extern数组名和指针的疑问

tsd3698 2009-05-16 05:33:10
我在file1中有定义数组:

int arr[]={1,2};

然后在file2中声明:

extern int *arr;
cout<<arr[0]<<endl;

编译通过,程序运行时出错,为什么?

另外,我在file1中有定义字符串:

char *fileName="abc";

然后在file2中声明:

extern char fileName[];
cout<<fileName<<endl;

编译和运行都通过,但结果不对,为什么?

...全文
619 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnStreamlet 2009-05-16
  • 打赏
  • 举报
回复
定义数组的时候只是为数组元素分配了空间
数组名已经被“求值”,不存在数组名这样一个指针变量
wanjingwei 2009-05-16
  • 打赏
  • 举报
回复
学习了
tsd3698 2009-05-16
  • 打赏
  • 举报
回复
有没有哪位达人告知数组名具体的内部实现,不要看表象的。程序中明显说明了,这样用extern是不行的,我想知道其在实现层面上的原因。多谢了
  • 打赏
  • 举报
回复
数组跟指针还是有本质上的区别的。
作为数据类型,你这样extern肯定不对啊。本来就不能混用。
Jalien 2009-05-16
  • 打赏
  • 举报
回复
顶~[Quote=引用 3 楼 xkyx_cn 的回复:]
数组名在大多数情况下可以转化为指针

但用extern声明时却不行,还是要用数组的方式:

C/C++ code
// file1
int arr[]={1,2};

// file2
extern int arr[];
cout<<arr[0]<<endl;
[/Quote]
papaofdoudou 2009-05-16
  • 打赏
  • 举报
回复
2楼的程序有问题吧,输出是一样的才对,这样看不出有什么不同
顶楼上和1楼!
xkyx_cn 2009-05-16
  • 打赏
  • 举报
回复
数组名在大多数情况下可以转化为指针

但用extern声明时却不行,还是要用数组的方式:

// file1
int arr[]={1,2};

// file2
extern int arr[];
cout<<arr[0]<<endl;
qizhao2001 2009-05-16
  • 打赏
  • 举报
回复
数组类型和指针类型是两种不一样的类型,只不过数组名在参数传递时可以落化为指针。

template<typename T> print_type(T) { cout << type_id(T).name() << endl; }

char a[10];
char* b;
char c[5]
然后
print_type(a);
print_type(b);
print_type(c);

看看,是三种不一样的类型。
sherrik 2009-05-16
  • 打赏
  • 举报
回复
指向int型的指针不等于int型数组 所以会出错

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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