求教 char* 与 char[]的问题

deviosyan 2010-09-08 10:41:00

#include <stdio.h>

extern char __executable_start[];
//extern char *__excutable_start; 改为这句,和上一句的输出结果不同,我想问下他们2个的区别。谁知道。谢谢!
;
int main()
{
printf("Executable Start %p\n", __executable_start);

return 0;
}
...全文
182 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
deviosyan 2010-09-08
  • 打赏
  • 举报
回复

/**
file a.c
**/
int m[3] = {1, 2, 3};

/**
file b.c
**/
int main()
{
extern int m[];
// extern int *m; 当打印printf("%p\n", &m);这时候和m[] 打印的结果一样。也就是 在*m情况下 m为其内容。
printf("%p", m);
return 0;
}


5楼正解。 请问 为啥子这样?有没有原因?阿
rujieonline 2010-09-08
  • 打赏
  • 举报
回复
看看 看看
白云飘飘飘 2010-09-08
  • 打赏
  • 举报
回复
extern char __executable_start[];数组名被转化为指向第一个元素的指针。输出的是第一个元素的地址。
extern char *__excutable_start; 改为这句的话直接把数组名当成指针,在32系统下把数组的前四个元素当成一个指针值输出了。
八哥 2010-09-08
  • 打赏
  • 举报
回复
extern char __executable_start[];
__executable_start的地址 就是数组的地址


extern char *__executable_start ;
__executable_start的地址不是数组开始的地址 它是用来保存数组的地址
FengRider 2010-09-08
  • 打赏
  • 举报
回复
这两者的分别就是变量存储数据所占内存空间位置及时间和空间大小的区别。
extern char __executable_start[];//表明这是一个外部变量,变量类型是个字符数组。既然是外部变量,自然不能够是局部,否则不能被别的文件引用,所以这里__executable_start是存放在全局区的一段字符串空间,其字符串长度已经固定,在定义的时候就确定了。

extern char *__excutable_start;//这里表明引用的是一个外部的字符指针,这个指针变量自身存放在全局区,但其指向的位置就未必在全局区了,有可能在堆,有可能在栈,当然也有可能在全局区,具体看你如何运用,其指向的空间大小也只有在具体使用的时候才能确定下来。

打个形象点的比方,数组就好象是房子,而指针就是钥匙。房子有容积,里面存放的东西体积是确切定的,最大不能超过房子的容积。而指针只是钥匙,钥匙也有自己的体积,但这与其能打开房子的容积没什么关系。钥匙如果打开的是大仓库的门,你就可以把东西放在仓库里面,如果钥匙开的是卧室的门,你就可以把东西放进卧室。
alexueQ 2010-09-08
  • 打赏
  • 举报
回复
char __executable_start[];内存是在栈上分配的。non-runtime已有地址。
char *__excutable_start;内存是在堆上分配的。runtime是分配地址。
pengzhixi 2010-09-08
  • 打赏
  • 举报
回复
extern char *__excutable_start;如果你在其它文件定义的是数组,但是在这里你改成这样那么就会将数组里面前4个字符解释成这个指针包含的地址。至于结果 可想而知不是你要的
hastings 2010-09-08
  • 打赏
  • 举报
回复
extern char __executable_start[];//表示要用到其它单元里的__executable_start字符数组,[]里不用指明大小
extern char *__excutable_start; //表示要用到其它单元里的__executable_start字符指针
pengzhixi 2010-09-08
  • 打赏
  • 举报
回复
推荐《C和指针》
小楫轻舟 2010-09-08
  • 打赏
  • 举报
回复
__executable_start[] 和
*__excutable_start
是其他文件中不同的变量
justkk 2010-09-08
  • 打赏
  • 举报
回复
这儿是一个声明,变量__executable_start在别的地方定义
声明必须与定义类型一致

69,371

社区成员

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

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