首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于C语言局部变量空间开辟的有关问题

2012-09-13 
关于C语言局部变量空间开辟的问题各位好,在学习字符串过程中,遇到空间开辟问题上的疑惑,望得到指教.代码如

关于C语言局部变量空间开辟的问题
各位好,在学习字符串过程中,遇到空间开辟问题上的疑惑,望得到指教.代码如下:

#include <stdio.h>
#include <assert.h>


char *my_strcpy(char *desc,const char *src)
{
assert((src != NULL) && (desc != NULL));

char *cpystr = desc;
while((*desc++ = *src++) != '\0')
;

return cpystr;

}

int main(void)
{
char *src = "hello world!";
char desc[10] = {};
char ch[12] = {'a', 'b'}; //本意是想看desc不够长度时是否会将此空间冲刷

 //通过打印,发现desc的首地址居然在ch之前
 //而如果desc长度设置为20却反而在ch之后了

printf("desc point %p, ch point %p\n", desc, ch); 
printf("%s \n", my_strcpy(desc, src));
printf("ch[0] = %c, ch[1] = %c\n", ch[0], ch[1]);

return 0;
}

请教一下编译器是如何开辟这些空间的?

[解决办法]
讨论这个问题前,你要告诉大家是什么编译器,多少位的机器。
建议你最好把代码转换成汇编语言看一看,就明白了。
有的问题不必问别人,因为别人也很难说清楚。
[解决办法]

C/C++ code
我运行的结果desc point 0240FF40, ch point 0240FF30 

热点排行