在C中,char *和char []有什么区别?

时间:2019-01-16 11:20:59

标签: c pointers

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

char *string = "mystring";

如果要尝试将其设置为只读字符数组:

string[0] = 'l';

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

char string[] = "mystring";

它保存在堆栈中,仅在当前作用域上。 字符*呢?它保存在堆上吗?还是在堆栈上?

当我尝试写作时:

char *string = "mystring";

然后:

string = "mystring2";

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

1 个答案:

答案 0 :(得分:0)

  

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

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

  

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

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