先看一個代碼
c++中內存分為5個區域:堆、棧、自由存儲區、全局/靜態存儲區和常量存儲區。
堆、棧不說啦,自由存儲區與堆類似,不過使用malloc分配free釋放,全局/靜態存儲區存儲全局變量和static變量,常量存儲區存放的是常量,不允許修改,“aaa”就存儲在這個位置。
將代碼改為如下情況:
char str[] = "aaa";
char* pch = str;
pch[2] = 'b';
cout<<pch<<endl;
此時“aaa”為棧分配,是數組中的存儲內容,所以可以修改。
1
#include "stdafx.h"
2
#include <iostream>
3
using namespace std;
4
5
int main()
6

{
7
char* pch = "aaa";
8
pch[2] = 'b';
9
cout<<pch<<endl;
10
return 0;
11
}
運行這幾行代碼,程序會崩潰。將指針pch指向“aaa”,而“aaa”是個字符串常量,后對pch[2]進行修改,賦值操作不合法,程序崩潰。
2

3

4

5

6



7

8

9

10

11

c++中內存分為5個區域:堆、棧、自由存儲區、全局/靜態存儲區和常量存儲區。
堆、棧不說啦,自由存儲區與堆類似,不過使用malloc分配free釋放,全局/靜態存儲區存儲全局變量和static變量,常量存儲區存放的是常量,不允許修改,“aaa”就存儲在這個位置。
將代碼改為如下情況:



