C-指針和數組的區別

指針的操做:ios

   容許:1)同類型指針的賦值數組

     2)與整形的加減運算函數

     3)指向同一數組內指針的減運算和比較spa

     4)賦 ‘0’ 或與 ‘0’ 比較指針

   不容許:1)兩指針的相加,相乘除,位移或maskcode

       2)與float,double類型相加blog

       3)不經過類型轉換,直接賦予除void*以外的其它類型指針內存

指針與數組的相同點:string

  1,a[i]能夠用*(a+i)表示io

  2, 當傳遞給函數做爲實參時,則都是一個地址

指針和數組的區別:

  1,數組是一塊連續區域,要麼是在靜態存儲區被建立(如全局數組),要麼是在棧上被建立,能夠更改指向。數組名對應着(而不是指向)一塊內存,其地址與容量在生命期內保持不變,不能更改指向。指針是一個變量,能夠++;數組不是一個變量,不能夠++

  2,sizeof指針表示指針大小,通常爲4byte;sizeof數組表示數組佔內存大小。

  3,數組不能夠直接賦值與比較,若是是字符數組要用strcpy和stycmp。指針能夠直接賦值,可是賦過去的是地址。比較通常也不比較地址,通常比較內容。

 

 1 #include <iostream>
 2 #include <string.h>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     //difference 1: 指向是否能夠更改
 8     //數組內容可變,可是不能夠++
 9     char d1a[] = "hello";
10     d1a[2] = 'L';
11     //d1a++;
12     cout << d1a << endl;
13     //指針指向內容可變,也能夠++
14     char* d1p = "world";
15     //d1p[2] = 'R';
16     cout << " " << d1p << endl;
17     //output the address of point to char
18     cout << "the address of d1p is: " 
19         << static_cast<void*>(d1p) << endl;
20     d1p++;
21     cout << "after ++, the address of d1p is: " 
22         << static_cast<void*>(d1p) << endl;
23 
24     //difference 2: copy and compare
25     //ARRAY, 不能使用賦值或者比較
26     char a[] = "hello";
27     char b[10];
28     strcpy(b, a); //can't use b = a;
29     //POINTER, valid
30     char* pa = "world";
31     char* pb;
32     pb = pa;
33 
34     //difference 3: sizeof
35     cout << "the size of a is: " << sizeof(a) << endl;
36     cout << "the size of b is: " << sizeof(pa) << endl;
37         
38 }

 輸出:

$ ./a.exe
heLlo
 world
the address of d1p is: 0x445006
after ++, the address of d1p is: 0x445007
the size of a is: 6
the size of b is: 4
相關文章
相關標籤/搜索