首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

C/C++ 記憶體管理實戰(二):陣列與指標的內容修改、複製與比較

     編輯:VC 教學

7.3 指標與陣列對比(續)

7.3.1 修改內容

字元陣列 a 容量 6 位元組,內容 "hello\0",可修改如 a[0]='X'。指標 p 指向常數字串 "world"(位於靜態儲存區),常數字串內容不可修改。語法上 p[0]='X' 編譯器不報錯,但執行期會導致錯誤(存取違規)。

char a[] = "hello";
a[0] = 'X';        // OK
cout << a << endl;

char* p = "world"; // p 指向常數字串
p[0] = 'X';        // 編譯通過,執行期崩潰!
cout << p << endl;

7.3.2 內容複製與比較

陣列名不可直接複製與比較。

  • 想把陣列 a 複製給 b,b = a 會編譯錯誤,須用 strcpy(b, a)。
  • 比較內容是否相同,if (b == a) 比較的是位址而非內容,須用 strcmp(b, a) == 0。

指標同理:

  • p = a 是將 a 位址指派給 p,非複製內容。正確做法:malloc 配置記憶體後 strcpy(p, a)。
  • if (p == a) 比較位址,內容比較須用 strcmp(p, a) == 0。
// 陣列
char a[] = "hello";
char b[10];
strcpy(b, a);                 // 不能用 b = a
if (strcmp(b, a) == 0) ...    // 不能用 if (b == a)

// 指標
int len = strlen(a);
char* p = (char*)malloc(sizeof(char)*(len+1));
strcpy(p, a);                 // 不要用 p = a
if (strcmp(p, a) == 0) ...    // 不要用 if (p == a)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved