读书人

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

发布时间: 2012-09-13 09:51:52 作者: rapoo

关于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 

读书人网 >C语言

热点推荐