hur.cn - 华软网

 热门搜索

极有难度

  作者:未知    来源:网络    更新时间:2011/8/17
C++">
File1.c:
char aa[255] = {'h','e','\0'};
extern char *a;

int _tmain(int argc, _TCHAR* argv[])
{
printf (“%s\n”, aa); /*打印”he”*/
printf (“%s\n”, a);   /*访问内存0x00006568*/
}

File2.c:
         char a[255] = {'h','e','\0'};


疑问是:为什么printf (“%s\n”, a);   /*访问内存0x00006568*/
这里为什么会访问0x00006568这个地址呢?
我是论坛新手,全部身家30分,最后一个铜板了。。。
---华软 网友回答---
0x00006568地址怎么了
---华软网友回复---
extern char *a;
char a[255]

一个是指针, 一个是数组, 这样是不对的, 一般情况编译器会警告

---华软网友回复---
如果这样写
extern char a[255];
char a[255] = {'h','e','\0'};

或者
extern char *a;
char *a = "he";
都是对的

而这样写的话
extern char *a;
char a[255] = {'h','e','\0'};

a是一个指针,对应是一个DWORD数,
a[255]处内存排布是0x68 0x65 0x00 0x00(0x68 0x65分别对应字符h和e)
强制转成DWORD就是0x00006568
     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。