考虑以下代码:
char* foo(int myNum) {
char* StrArray[5] = {"TEST","ABC","XYZ","AA","BB"};
return StrArray[4];
}
Run Code Online (Sandbox Code Playgroud)
当我回到StrArray[4]呼叫者时,这应该有用吗?由于数组是在堆栈上定义的,当调用者获取指针时,该部分内存已超出范围.或者这个代码会起作用吗?
这段代码可行.您将返回指针的值,该值指向StrArray[4]常量字符串"BB".常量字符串的生命周期等于整个程序的生命周期.
最重要的是什么指针所指向的寿命来,不要在那里指针存储.例如,下面类似的代码将不会工作:
char* foo(int myNum) {
char bb[3] = "BB";
char* StrArray[5] = {"TEST","ABC","XYZ","AA",bb};
return StrArray[4];
}
Run Code Online (Sandbox Code Playgroud)
这是因为bb数组是foo()函数堆栈上的临时值,并在返回时消失.