首页 > 解决方案 > 在 C 中,char* 和 char[] 有什么区别?

问题描述

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

char *string = "mystring";

如果我尝试这样做,则使其成为只读字符数组:

string[0] = 'l';

我会得到一个错误。当我写:

char string[] = "mystring";

它保存在堆栈中,就在当前范围内。char* 呢?它保存在堆上吗?还是在堆栈上?

当我尝试写作时:

char *string = "mystring";

接着:

string = "mystring2";

它起作用了,但是旧的“mystring”数组发生了什么?这样做会导致内存泄漏吗?

标签: cpointers

解决方案


char* 呢?它保存在堆上吗?还是在堆栈上?

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

它起作用了,但是旧的“mystring”数组发生了什么?这样做会导致内存泄漏吗?

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


推荐阅读