首先定義一個數組和一個指針:
char *aa = "abcde";
char bb[6] = "abcde";// 注意:char bb[5] = "abcde";是錯誤的!!
他們之間有什麼共同點和區別呢?
1、共同點
訪問數據的時候,可以這樣訪問:
char cTmp = aa[0];
char cTmp2 = bb[0];
此時,cTmp = cTmp2.
還可以這樣:
char cTmp = *aa;
char cTmp2 = *bb;
sizeof(*aa)=1;//取得aa的第一個成員
sizeof(*bb)=1;//取得bb的第一個成員
2、區別:
aa是一個指針,可以作爲左值,如:aa++; 等,是正確的!但是aa[0]='c'是錯誤的!
bb是一個數組,不能作爲左值,如:bb++; 等,是錯誤的!但是bb[0]='c'是正確的!
sizeof(aa)=4;//因爲aa是指針
sizeof(bb)=6;//等於數組的大小
sizeof(&aa)=4;//取得aa的地址
sizeof(&bb)=6;//取得bb的地址,等於數組的大小
由此可以看到,雖然aa和bb在某些時候是可以通用的,但是由於數據類型不一樣,還是存在很大的區別。