程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 指針與數組的對比

指針與數組的對比

編輯:C++入門知識

以字符串為例比較指針與數組的特性

1. 修改內容

字符數組a 的容量是6 個字符,其內容為hello\0。內容可變。

指針p 指向常量字符串“world”(位於靜態存儲區,內容為world\0),常量字符串的內容是不可被修改的。

 

char a[] = “hello”; 
a[0] = ‘X’; 
cout << a << endl; 
char *p = “world”; // 注意p 指向常量字符串  
p[0] = ‘X’; // 編譯器不能發現該錯誤  
cout << p << endl; 

char a[] = “hello”;
a[0] = ‘X’;
cout << a << endl;
char *p = “world”; // 注意p 指向常量字符串
p[0] = ‘X’; // 編譯器不能發現該錯誤
cout << p << endl

;2. 內容復制與比較

不能對數組名進行直接復制與比較

 

數組…  
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) 

// 數組…
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)

3. 計算內存容量

 

char a[] = "hello world"; 
char *p = a; 
cout<< sizeof(a) << endl; // 12 字節  
cout<< sizeof(p) << endl; // 4 字節 

char a[] = "hello world";
char *p = a;
cout<< sizeof(a) << endl; // 12 字節
cout<< sizeof(p) << endl; // 4 字節

擴展知識:

1. 當數組作為函數的參數進行傳遞時,該數組自動退化為同類型的指針

2. 一個指針變量既可以指向一個數組,也可以指向一個數組元素,若定義一個指針變量,並將數組的首址傳給指針變量,則該指針就指向了這個一維數組,這個操作就相當於將數組名或第一個元素的地址賦予這個指針變量。如:

    int a[100];         
    int *a_pointer;          //定義一個指針變量,指向整型變量

    把 a_pointer 指向數組 a 的第一個元素,可用下面兩種的語句:
    (1)a_pointer=&a[0];      //該語句將這個數組的第一個元素的地址賦值給指針變量   
    (2)a_pointer=a;          //將數組名所代表的數組的首地址賦予指針變量

 

 

 

 

 

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