J T*_*J T 3 c c++ string pointers arm
使用ARM,C编译器,我可以成功编译并运行以下代码:
static char * myString = 0;
void myfunc(int x){
if (x <= 0)
myString = "Hello World";
else
myString = "This is a different string with a different length";
}
int main(){
myfunc(-1);
printf("%s\n", myString);
myfunc(2);
printf("%s\n", myString);
}
Run Code Online (Sandbox Code Playgroud)
为什么这样做?
指针不应该是NULL指针吗?
至少,不应该在只读内存位置分配字符串文字吗?
编辑:它是一个C++编译器
EDIT2:为什么在myfunc超出范围后,字符串文字存在于静态范围内?字符串文字是否未在堆栈中声明?什么时候他们被解除分配?
谢谢!
这两个字符串在只读存储器中分配,并且完全不同.但是你用一个相同的指针指向它们中的每一个......什么是不明白的?
记住,char*只是一个指针.它是可变的(非常数).
char* p = 0;
p = "Hello"; //OK
p = "Jo" //OK;
p[0] = 'X' //OOPS, now THIS is bad (undefined behavior)
Run Code Online (Sandbox Code Playgroud)
编辑后:
不,字符串文字具有静态存储持续时间(与所有其他文字不同),它们不是在堆栈上创建的.它们将存在直到程序终止.