c語言中用指標和用下標訪問陣列元素的本質區別

2021-03-07 02:24:33 字數 2264 閱讀 1479

1樓:匿名使用者

兩者意思一樣,但是編譯器處理起來不見得一樣。就像樓上的例子a[2]跟*(a+2)是乙個意思。但是對於編譯器來說a[2]是一種固定的寫法,因此對於位址偏移什麼的有固定的處理方式,而*(a+2)在語法上應當分解為先算a+2再取值,如果編譯器不優化,完全按照這種定義去編譯的話,那麼就會有先算出a+2這個位址這一步,因此效率要低些。

至於編譯優化能不能使兩者一致,那就很難說了。

比如我編了這樣乙個程式

int a[100];

int b;

int i,j,k;

for(i=0;i<1000000;i++)}}和把b=a[0]換成b=*(a)所耗時間一樣。而分別換成b=a[k]和b=*(a+k)後者所耗時間明顯增加很多,前者也有所增加,但比較少。編譯器優化不能用這個語句測試,因為整個會被優化掉。

2樓:匿名使用者

只有語法有區別

本質沒有區別,本質c是把陣列當作指標來用的。

比如說下面的定義:

int a[3];

2[a]=10;

這樣是合法的。

2[a] = 10被翻譯成*(2+a)=10; 等價*(a+2)=10;等價於a[2]=10;

不過別這麼寫。over

3樓:匿名使用者

胡海濤 21棟強勢圍觀,不要以為我們不知道是你問的,我要告訴c語言老師!你慘了。

4樓:匿名使用者

21棟109前來圍觀

5樓:低調地淡定

無論指標指向的內容有多大,指標都只有4個位元組。從內容上來看,訪問指標佔用空間小。

另外,陣列名本身就可以當做是乙個位址,所以指標訪問與下標訪問,並無多大區別。

6樓:曾哥鐵血史泰龍

21棟110圍觀樓主杯具..

c語言中的陣列和指標的區別

7樓:

c語言中,陣列的名稱等價於陣列的首位址,

當然可以利用指標開闢動態空間,使用方式與

陣列在形式上相同的,

但是他們有乙個本質的區別,陣列名相當於乙個位址常數,而指標是乙個以位址為內容的變數。

指標與陣列的關係可以參考下面的網頁:

8樓:匿名使用者

指標可分為:指標常量,指標變數

。指標常量是指在程式執行過程中變數值不能改變的變數(例如:char* const p = "abc";)。

指正變數是指在程式執行過程中變數值可以改變的變數(int * p;p++;)。

陣列:陣列是裝載的容器,陣列名代表陣列首位址(例如:int a[20],則a代表的是a[0]的位址),陣列名是乙個指標常量,在執行過程中不能改變其值(如上:

a的值是&a[0],若有a=&a[2]:則報錯)。

他們的區別:陣列名是乙個指標常量,而指標可分為:指標常量和指標變數。

我想你應該明白了。

9樓:匿名使用者

陣列名是陣列的第乙個元素的位址,其意義相當於乙個指標,比如

int a[10],*p;

p=a; //把陣列的首位址賦給了p

p=&a[0]; //p的初值為a[0]的位址與上面的語句等價可以通過指標引用陣列元素

陣列本來就有兩種表示方法

一種是下標法如a[i];

一種是指標法如*(a+i)或*(p+i)這兩種表示方法都與a[i]等價

10樓:匿名使用者

陣列是存放資料的一段空間,陣列中可以存放字元和數字。指標相當於乙個位址,它是指向某個單元的位址。。陣列名相當於指標。。

11樓:匿名使用者

定義char a[100], *b = a;

1、陣列和指標都表示位址,在某些情況下,陣列和指標是可以相互使用的,如訪問某個元素,a[2], *(a + 2), b[2], *(b +2)

2、不同的是,陣列初始化時就有給定值的空間,識別符號不能更改,如a = 0,這是錯誤的。而指標如果不初始化,值是隨機的,需要給指標分配空間才能訪問。

12樓:匿名使用者

簡單明瞭的說:

陣列是裝載的容器,

指標是指向這些容器的位址的。

那為什麼有時候可以用指標來代替陣列呢?

那是因為當指標指向了該陣列的位址的時候,它就可以實現這個功能!

c語言中,陣列元素的下標下限為,c語言中陣列元素下標的上下限是什麼?

c語言中,陣列元素的下標下限為0。陣列中的各元素的儲存是有先後順序的,它們在記憶體中按照這個先後順序連續存放在一起。陣列元素用整個陣列的名字和它自己在陣列中的順序位置來表示。例如,a 0 表示名字為a的陣列中的第乙個元素,a 1 代表陣列a的第二個元素,以此類推。對於vb的陣列,表示陣列元素時應注意...

c中,陣列名跟指標有區別嗎,C語言中陣列名和指標的區別

其實可以認為陣列名就是乙個不可更改的常量指標。但是 嚴格來說,二者有一定區別,比如sizeof a a為陣列名的時候,算出來是a這個陣列所佔位元組數,但是如果a是指標,不管指向什麼,結果都是乙個int的位元組數 取決於特定機器 因而,有人認為陣列名是乙個可以退化為常量指標的型別,這種退化在陣列名作為...

c語言中定義指向字元的指標陣列chars5則

void sort char s 這裡接收到的是抄指襲針陣列,即 陣列中各元素 是指標位址,s是陣列首位址 s i 表示第i 1個元素 的值 位址,乙個字串的首位址,s i 表示這個字串的第乙個元素,是個字元 s i是第i 1個元素的位址,s i 是位址中的資料,等同於s i c語言中char是什麼...