您的位置:首页 > 职场人生

重新开始战斗22-程序员面试宝典-P66_7.2面试题3--局部数组和全局数组问题

2014-04-03 16:24 357 查看
问题描述:

这个函数有什么问题

Char *strA()

{

Charstr[] = “hello world”;

Returnstr;

}

这个函数是存在风险的,如果要利用这个函数,例如:

Char *p = strA()

调用这个函数的意图是希望p指向“hello world”这个字符串,但是注意这条语句,Char str[] = “hello world”;,这里是说str是个局部数组,因此,当这个函数执行完成后,系统会回收局部变量,也就是说str数组会被销毁。销毁后,那么p又指向什么呢?所以说有风险。

改进:

Const Char *strA()

{

Char*str = “hello world”;

Returnstr;

}

有两个改进,先谈谈函数体里面的改动,为什么要将str[]改为*str,如果为Char str[] = “hello world”;则为局部数组,函数执行完成后,整个数组将会被回收,如果为Char* str = “hello world”;这里*str依然为局部变量,但是,“helloworld”不在随str的销毁而销毁,因为,“hello world”不是指针的一部分,也不是数组,而是一个常量字符串,常量字符串当然不是在堆栈中存储,它保存在只读的数据段中,因此,函数执行完成后,str的回收将不会回收“hello
world”。

再者,根据上面的分析,就能理解加上const限定符的原因了,因为str指向的是一个常字符串,因此不应该对其进行修改,所以加上const限定符。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: