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

请教一个char[] 和char *的有关问题

2012-04-09 
请问一个char[] 和char *的问题?C/C++ codechar * GetA(){char *p123return p}char * GetB(){char p[

请问一个char[] 和char *的问题?

C/C++ code
char * GetA(){char *p="123";return p;}char * GetB(){char p[]="123";return p;}int main(){cout<<GetA()<<endl;cout<<GetB()<<endl;return 1;}


请问下为什么打印GetA的结果是"123",而GetB()打印的结果是乱码是为什么呀?
GetA和GetB中p不都是局部变量,当其退出作用域的时候,不是应该打印出来的数据都是乱码?

[解决办法]
因为"123"是全局的,而p[]是栈空间,其内容是从全局的"123"拷贝过去的。
[解决办法]
两种方式分配内存的地方是不一样的,char[]分配在函数的堆栈上,函数结束后,内存会释放。而char*不是
分配在函数的堆栈上,所有不会释放。
[解决办法]
噢噢..看到了,二楼说的明白啊...
[解决办法]
字符串常量保存在数据段。
[解决办法]
别说看了这个你还不会
http://www.cnblogs.com/chenyuming507950417/archive/2011/12/29/2306043.html
[解决办法]
把"abc"赋给一个字符指针变量时,如
char* ptr = "abc";
因为定义的是一个普通指针,并没有定义空间来存放"abc",所以编译器得帮我们
找地方来放"abc",显然,把这里的"abc"当成常量并把它放到程序的常量区。

如果char* ptr = "abc";写在函数体内,那么虽然这里的"abc\0"被 放在常量区中,但是ptr本身只是一个普通的指针变量,所以ptr是被放在栈上的,只不过是它所指向的东西被放在常量区罢了。
[解决办法]
探讨
因为"123"是全局的,而p[]是栈空间,其内容是从全局的"123"拷贝过去的。

[解决办法]
"123"分配在.text中,退出函数不会自动释放。
[解决办法]
探讨
别说看了这个你还不会
http://www.cnblogs.com/chenyuming507950417/archive/2011/12/29/2306043.html

[解决办法]
探讨

两种方式分配内存的地方是不一样的,char[]分配在函数的堆栈上,函数结束后,内存会释放。而char*不是
分配在函数的堆栈上,所有不会释放。

[解决办法]
探讨
"123"分配在.text中,退出函数不会自动释放。

热点排行
Bad Request.