Pit*_*kos 5 c pointers initialization char
我初始化一个char
指针:
char *a="test";
Run Code Online (Sandbox Code Playgroud)
我在某些地方读到这被认为是只读的,这很危险.
这是否意味着"test"
堆中没有分配空间?这是否意味着字符串"test"可以在程序中稍后写入?
---扩大我的问题---
如果我已a
按上述方式进行了初始化,那么我会进行一系列其他初始化,例如:
int b=20;
char c[]="blahblahblah";
Run Code Online (Sandbox Code Playgroud)
内存中的"测试"会被"20"或"blah"覆盖吗?或者这种情况没有根据?
Mys*_*ial 14
这很危险,因为字符串不可修改.尝试这样做会导致未定义的行为.
所以最好这样做:
const char *a = "test";
Run Code Online (Sandbox Code Playgroud)
你是正确的,"test"
在这种情况下,没有在堆或堆栈*上分配,而是位于不可修改的静态内存中.
*标准对堆栈或堆没有任何说明,尽管它通常是如何实现的.
另一方面:
char a[] = "test";
Run Code Online (Sandbox Code Playgroud)
可以安全修改,因为它只是简短形式:
char a[] = {'t','e','s','t','\0'};
Run Code Online (Sandbox Code Playgroud)
这是一个普通的可修改数组.