c和cpp中的那些不同(指標和陣列)

2021-07-29 16:59:14 字數 1171 閱讀 1127

在c/c++的學習中,經常能碰到因為c++為了相容c語法而產生的一些不同。

或者說是語言上一些看起來相似的特性但是作用不完全相同或者完全不同的特性。

為了做到把書越讀越薄,有必要做乙個整理,把這兩個相愛相殺的一些坑點列舉出來。

因為也有不少大神關於這些問題做出了詳細解釋,所以我只寫出關鍵的易於區分的特點

,更多細節還是得要多看書。

先來一段**

char

array="i am the array";//15個位元組(包括結束符)

char* pointer = array;

cout

<1.sizeof關鍵字,作用在陣列上得到的陣列的整體位元組大小。作用在指標上得到的是乙個指標型別的位元組數4,當使用64位編譯時輸出指標型別的大小是8位元組。

第二個區別:兩者的型別完全不是一回事

1.從上面的sizeof可以初步得到結論。指標變數是乙個可以存放變數位址的實體,它有自己的位址,可以存放(指向)別人的位址。

2.陣列指代著記憶體中一塊連續區域,該連續區域的起始位址的可以用過乙個名字來定址,要注意的是陣列名並非乙個存放了陣列首位址的變數,而是陣列名就代表著陣列的首位址,只不過編譯器給了該位址乙個符號名。

第三個區別:可變性

1.經過編譯,編譯器給陣列分配好空間後,通過陣列名就和乙個唯一的位址繫結在一起了,不能通過陣列名做出指標一樣的指向操作,因為陣列名自己就是乙個位址的符號而已,給乙個位址覆蓋另乙個位址顯然是有問題的。陣列是靜態的。

2.指標可以不要求定義後,立即指向乙個記憶體位址,可以在其生存期內任何時刻做出指向的操作,指向不同的記憶體位址。

3.陣列不存在指向這一說法。這個要注意

最後:有一點要指出的是,陣列無論是建立在靜態儲存區還是棧區,或者是堆區。在建立好後,陣列的大小都是固定的了,是靜態的。在堆上的建立的陣列唯一的區別是編譯器並不會給其分配乙個符號名,所以操作堆上陣列時需要通過乙個指標變數來儲存堆上陣列的首位址。然後通過這個指標去使用陣列,但需要注意存放堆陣列的指標只能找到堆陣列的首元素。

如下面

char* p = new

char[20];

char* d = "hello world";

strcpy(p,d);

cout

<<*p

cpp 與c之不同 指標

void void pointer output sizeof void 1 pv 0x7fff5fbff834,pi 0x7fff5fbff834,pi 5 pv 0x7fff5fbff835 pv 0x7fff5fbff83a總結 void void pointer 總結 c不支援函式過載,因此...

把常量字串賦予不同陣列和不同指標之間的區別

有下面這樣乙個c語言函式 int text void char str1 good good study char str2 good good study char str3 good good study char str4 good good study if str1 str2 printf...

C 中引用和指標的不同

分類 c 2009 03 01 14 19 281人閱讀收藏 舉報 引用,其本質就是指標,將它用在一些特別的場合,會比指標更簡潔,更方便。具體說來,指標多用於動態記憶體管理和對陣列的操作等,c風格的 接收和返回指標 引用則往往用在接收和返回類型別的名字空間域函式或類域函式,以避免類物件的複製開銷。但...