c - 在C语言中,char*和char[]有什么区别?

标签 c pointers

我知道很多人问过这个问题,但我仍然有一些疑问。 我读到了这篇文章:

char *string = "mystring";

如果我试图这样做,则将其设为只读字符数组:

string[0] = 'l';

我会收到一个错误。 当我写下:

char string[] = "mystring";

它保存在堆栈上,仅保存在当前范围内。 那么 char* 呢?它保存在堆上吗?或者在堆栈上?

当我尝试写作时:

char *string = "mystring";

然后:

string = "mystring2";

它有效,但是旧的“mystring”数组发生了什么?这样做是否会导致内存泄漏?

最佳答案

what about the char*? is it saved on the heap? or on the stack?

char* 保存在堆栈中。但这只是一个指针。实际的字符串数据将存储在程序的可执行文件中(这种情况发生在编译程序时,不是 char *string = "mystring"; 将其放在那里)。对 char* 的赋值会使用程序二进制文件中 "mystring" 的地址对其进行初始化。

it worked, but what happened to the old "mystring" array? is there a memory leak caused by doing this?

您的可执行文件将包含"mystring";"mystring2" 的内容。当您执行 string = "mystring2"; 时,您使该指针从指向一个指针变为指向另一个指针。这里没有内存泄漏。

关于c - 在C语言中,char*和char[]有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54215966/

相关文章:

c - 在 DFS 中使用递归来解决使用 C 的逻辑游戏?

c - 对具有已知边界的平面点集进行三角测量

c - 如何在不更改 C 中原始数组的情况下对指针数组进行排序

c - 如何将 char* 传递给函数?

c - 在C中如何将局部函数变量值传递给另一个函数并无错误地打印值

c - 寻找 math.h 函数的纯 c 版本(无协处理器支持)

c - 使用Floyd-Warshall算法确定 "odd"矩阵

c - 使用 GDB 进行 MPI 调试 - 当前上下文中没有符号 "i"

c++ - 有人可以解释在 C++ 中通过指针传递和通过引用传递的目的是什么吗?

c++ - 调用由指针非静态初始化的类方法