數組到底是不是指針?這個問題隔三岔五就會被問一遍。其實只要搞清楚他們的原理,并且能熟練的使用,完全沒有必要糾結這個問題。
數組是內存中的一塊連續內存,之所以他能跟指針扯上關系,是因為數組名表示了數組第一個元素的地址,于是很多同學就認為數組名是指針。
準確的講,數組名也只是個標識符,方便用戶使用罷了。
把它理解成地址常量更合適一些。
所以對數組名加加這個操作,編譯器是不允許的。
int array[5] = {1, 2, 3, 4, 5}; array++;但是訪問元素的時候,只要你不去修改數組名,用起來跟指針沒什么區別。
int array[5] = {1, 2, 3, 4, 5}; *(array + 1);
指針在計算機里面也是一塊內存,不過只是一個單獨的元素,不像數組,可以由多個元素組成。一般占4字節或者8字節。它里面保存的是其他內存的地址。
所以指針用起來就比較靈活,在合法的情況下,可以來回移動。
如果現在有個數組,把數組第一個元素的地址保存在指針里面,那訪問數組元素既可以用取值的方式,又可以用數組下標的方式。
int array[5] = {1, 2, 3, 4, 5}; int*p=array; p[1]; *(p + 1);
總結一下,數組和指針是兩個不同的東西,嚴格來講,不能把數組等同于指針,包括數組名,也不能等價于指針,只是很多場景下,他們可以互相表示。
作為初學者,我也不太建議去糾結這樣的問題,這個問題也只有在面試的時候會遇到,學習的時候,把他們原理搞清楚,能正確的使用數組名或者指針去訪問數據,也就足夠了。
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
內存
+關注
關注
8文章
3025瀏覽量
74056 -
指針
+關注
關注
1文章
480瀏覽量
70564 -
數組
+關注
關注
1文章
417瀏覽量
25947
原文標題:數組名是不是指針
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
C語言數組名和指針
指針是C/C++語言的特色,而數組名與指針有太多的相似,甚至很多時候,數組名可以作為指針使用。于是乎,很多程序設計者就被搞糊涂了。而許多的大
發表于 08-27 17:48
?729次閱讀
從編譯器角度分析C語言中數組名和指針的區別
。也許這樣的聲明可以編譯通過(在gcc下通過了),但是把一個數組名當成一個指針來使用,別指望它能運行起來。第二,指針是一個變量,而數組名不是
發表于 06-23 23:36
C語言——指針、數組和函數
C語言——指針、數組和函數基本解釋 1、指針的本質是一個與地址相關的復合類型,它的值是數據存放的位置(地址);數組的本質則是一系列的變量。 2、
發表于 04-20 15:25
C語言中指針與數組
#define SIZE 10int arry[SIZE]={0,1,2,3,4,5,6,7,8,9}; //數組名arry表示數組首元素的地址*int p,temp;//可直接初始化定義指針
發表于 01-13 13:11
?3次下載
C語言數組元素的指針
C語言調用函數時虛實結合的方法都是采用“值傳遞”方式,當用變量名作為函數參數時傳遞的是變量的值,當用數組名作為函數參數時。
由于數組名代表的是數組元素地址,因此傳遞的值是地址,所以要去形參為
C++數組名和數組拷貝詳解
C++數組間賦值不能直接通過數組名稱 randy = sesame進行,因為數組名并不是指針,大部分情況下,編譯器會隱式轉換為指向
發表于 08-21 15:09
?470次閱讀
數組與指針不能混用的情況
和指針的基本概念。數組是一組相同類型的元素的集合,而指針是一個變量,它存儲了一個地址,該地址指向內存中的某個位置。在 C/C++ 中,數組名稱可以當作指向
數組名之間可以直接賦值嗎
; ????return 0;} 想把數組 a 里面的數據全部賦值給 b,寫成 b = a 行不行? 和這個問題類似的還有,數組名為什么不能進行 ++ 操作? char?array[5]?=?{0};array++; 比如
評論