在函数中
char a[]=“adsfadsf”;
其中字符串是存在静态区,但a是个局部变量,
存储方式不是冲突了吗,请求解答。
------解决方案--------------------
char a[]=“adsfadsf”;
a是局部对象--一个char类型的数组(在栈区).
“adsfadsf”的确是常量字符串,是在静态区的(勉强这么分区吧)."
char a[]=“adsfadsf”;
//这句的意思是用常量字符串"adsfadsf"初始化数组a.运行到这里时会把a执行一个类似strcpy(a,"adsfadsf");这样的动作.
a是可以修改了,他只是常量字符串的copy
------解决方案--------------------
我的#4不完全正确(又没看清,今天有点晕)
a[]会在栈上申请空间,然后将常量字串拷入
看下汇编便知:
- Assembly code
; char a[]="adsfadsf"; ; @1: mov eax,dword ptr [$elambaia] //$elambaia在常量段_DATA segment mov dword ptr [ebp-12],eax //a[]在栈上,这段程序是将数据copy入 mov eax,dword ptr [$elambaia+4] mov dword ptr [ebp-8],eax mov al,byte ptr [$elambaia+8] mov byte ptr [ebp-4],al