程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 高質量C++/C編程指南-第7章-內存管理(2)

高質量C++/C編程指南-第7章-內存管理(2)

編輯:關於C++

7.3.1 修改內容

示例7-3-1中,字符數組a的容量是6個字符,其內容為hello\0。a的內容可以改變,如a[0]= ‘X’。指針p指向常量字符串“world”(位於靜態存儲區,內容為world\0),常量字符串的內容是不可以被修改的。從語法上看,編譯器並不覺得語句p[0]= ‘X’有什麼不妥,但是該語句企圖修改常量字符串的內容而導致運行錯誤。

char a[] = “hello”;

a[0] = ‘X’;

cout << a << endl;

char *p = “world”; // 注意p指向常量字符串

p[0] = ‘X’; // 編譯器不能發現該錯誤

cout << p << endl;


示例7-3-1 修改數組和指針的內容

7.3.2 內容復制與比較

不能對數組名進行直接復制與比較。示例7-3-2中,若想把數組a的內容復制給數組b,不能用語句 b = a ,否則將產生編譯錯誤。應該用標准庫函數strcpy進行復制。同理,比較b和a的內容是否相同,不能用if(b==a) 來判斷,應該用標准庫函數strcmp進行比較。

語句p = a 並不能把a的內容復制指針p,而是把a的地址賦給了p。要想復制a的內容,可以先用庫函數malloc為p申請一塊容量為strlen(a)+1個字符的內存,再用strcpy進行字符串復制。同理,語句if(p==a) 比較的不是內容而是地址,應該用庫函數strcmp來比較。

// 數組…

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)

示例7-3-2 數組和指針的內容復制與比較

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved