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

高品質 C++/C 程式設計指南 第 7 章 (二):陣列與指標的內容修改、複製與比較

     編輯:關於C++

7.3.1 修改內容:陣列可改,字串字面值不可改


char a[] = "hello";
a[0] = 'X'; // ✅ 陣列在棧/靜態區,內容可改

char* p = "world"; // 指向靜態區字串字面值 (唯讀)
p[0] = 'X'; // ❌ 編譯通過,執行期崩潰 (存取違規)

編譯器**無法靜態偵測**此錯誤,**務必肌肉記憶**:char* p = "literal" 唯讀。

7.3.2 內容複製與比較:陣列名/指標 ≠ 內容

操作陣列指標
複製strcpy(b, a) ❌ b = amalloc → strcpy(p, a) ❌ p = a (僅複製地址)
比較strcmp(b, a) == 0 ❌ b == astrcmp(p, a) == 0 ❌ p == a (比較地址)

正確範式


// 陣列
char a[] = "hello";
char b[10];
strcpy(b, a);
if (strcmp(b, a) == 0) { ... }

// 指標
int len = strlen(a);
char* p = (char*)malloc(sizeof(char) * (len + 1));
strcpy(p, a);
if (strcmp(p, a) == 0) { ... }
free(p); // 記得釋放

核心概念:陣列名 = 地址常量 (不可修改左值);指標 = 地址變量。**內容操作必須用標準庫函數**,別嘗試用賦值/比較運算子。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved