陣列名和指標的區別C語言中陣列名和指標的區別

2021-03-07 02:24:34 字數 5863 閱讀 3364

1樓:匿名使用者

可以!下面是我學習陣列和指標的總結: (1)指向陣列首地址

對於一維陣列a[10]:陣列的首地址為a; 呼叫:p=a; *(a+i)或者*(p+i)

對於二維陣列a[3][4]:整個陣列的首地址為a[0];呼叫:p=a[0]; *(a[0]+i)或者*(p+i)。此時a代表陣列第一行的地址。

(3)指向陣列的每行

形如:int a[3][4];

int (*p)[4]; p=a;

呼叫:*(*(p+i)+j)例:;

int (*p)[4],i,j;

cin>>i>>j;

p=a; //a代表的是陣列第一行的首地址.

cout<<*(*(p+i)+j)<

(4)指標陣列

例如:(字串陣列指標法)

; cout<

處理字串還有以下方法:

(字元陣列法,c-string法)

;cout<

(字串陣列法,string法)

; cout<

三種方法的共同點是name[0]都是代表的"basic"的首地址而非其本身。

(5)指向指標的指標

形如 char **p;例:;

p=name+2;

cout<<*p<

cout<<**p<

分析:*p=name[2]= "c++"的首地址,(通常所說一個字串的「地址」實際上指的是它的「首地址」或者「起始地址」),用cout 輸出的不是字串的首地址而是整個字串(只要把一個字串的起始地址給它,cout就一直往後面輸出,直到遇到結束符'\0'為止),為了證明這一點,請看:string a=「finish」;cout<

故:本例中第一個*p輸出"c++",第二個**p代表"c++"的首地址的內容,即c。

在上一例中,name[0]為"basic"的首地址,輸出"basic",若換成*name[0]則輸出b,若換成name則代表整個陣列的首地址(而不是單個字串"basic"的首地址),所以此時輸出的是整個陣列的首地址。若用*name則輸出整個陣列的首地址的內容,即"basic"(可見字串的首地址內容為單個字元,一維陣列首地址的內容為它的第一個元素,對於二維陣列,比如int a[3][4],a代表的是第一行的地址,所以cout<

2樓:匿名使用者

可以。a是陣列名,相當於陣列的首地址,b是一個指標,int *b = a; 然後b就指向a這個地址,呼叫b[4]就是b+4的地方,也就是a+4這個地方,然後就是同一個地方,所以b[4]等價於a[4]

陣列名和指標的區別?

3樓:百度使用者

可以!下面是我學習陣列和指標的總結: (1)指向陣列首地址

對於一維陣列a[10]:陣列的首地址為a; 呼叫:p=a; *(a+i)或者*(p+i)

對於二維陣列a[3][4]:整個陣列的首地址為a[0];呼叫:p=a[0]; *(a[0]+i)或者*(p+i)。此時a代表陣列第一行的地址。

(3)指向陣列的每行

形如:int a[3][4];

int (*p)[4]; p=a;

呼叫:*(*(p+i)+j)例:;

int (*p)[4],i,j;

cin>>i>>j;

p=a; //a代表的是陣列第一行的首地址.

cout<<*(*(p+i)+j)<

(4)指標陣列

例如:(字串陣列指標法)

; cout<

處理字串還有以下方法:

(字元陣列法,c-string法)

;cout<

(字串陣列法,string法)

; cout<

三種方法的共同點是name[0]都是代表的"basic"的首地址而非其本身。

(5)指向指標的指標

形如 char **p;例:;

p=name+2;

cout<<*p<

cout<<**p<

分析:*p=name[2]= "c++"的首地址,(通常所說一個字串的「地址」實際上指的是它的「首地址」或者「起始地址」),用cout 輸出的不是字串的首地址而是整個字串(只要把一個字串的起始地址給它,cout就一直往後面輸出,直到遇到結束符'\0'為止),為了證明這一點,請看:string a=「finish」;cout<

故:本例中第一個*p輸出"c++",第二個**p代表"c++"的首地址的內容,即c。

在上一例中,name[0]為"basic"的首地址,輸出"basic",若換成*name[0]則輸出b,若換成name則代表整個陣列的首地址(而不是單個字串"basic"的首地址),所以此時輸出的是整個陣列的首地址。若用*name則輸出整個陣列的首地址的內容,即"basic"(可見字串的首地址內容為單個字元,一維陣列首地址的內容為它的第一個元素,對於二維陣列,比如int a[3][4],a代表的是第一行的地址,所以cout<

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

4樓:匿名使用者

陣列在當作引數傳遞時,可以當作指標;當然,引數傳遞相當於賦值操作,所以用指標來接受陣列的值也是可以的。

除此之外,指標就是指標,陣列就是陣列,一點也不一樣,例如1,陣列名不能作為左值,即不能被賦值,也不能進行++ --操作2,sizeof 陣列名 和 sizeof 指標 不同

5樓:

陣列名本質上就是個指標,也就是地址,但是它是一個常指標,是個固定值,而指標是是指標變數的簡稱,是個變數,這個變數存放的是地址值,它的值是可以改變的。例如:

int *p;

int a,b;

p=&a;  //把變數a的地址賦值給指標p,那麼指標p就指向了變數a的記憶體單元

p=&b;  //把變數b的地址賦值給指標p,那麼指標p就指向了變數b的記憶體單元

int a[10];  //整型陣列,陣列名a本質上是一個地址,是首元素地址,它是一個固定值,不能對它進行賦值操作。

陣列指標和指標陣列的區別

6樓:匿名使用者

陣列指標(也稱行指標)

定義 int (*p)[n];

()優先順序高,首先說明p是一個指標,指向一個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p+1時,p要跨過n個整型資料的長度。

如要將二維陣列賦給一指標,應這樣賦值:

int a[3][4];

int (*p)[4]; //該語句是定義一個陣列指標,指向含4個元素的一維陣列。

p=a; //將該二維陣列的首地址賦給p,也就是a[0]或&a[0][0]

p++; //該語句執行過後,也就是p=p+1;p跨過行a[0]指向了行a[1]

所以陣列指標也稱指向一維陣列的指標,亦稱行指標。

指標陣列

定義 int *p[n];

優先順序高,先與p結合成為一個陣列,再由int*說明這是一個整型指標陣列,它有n個指標型別的陣列元素。這裡執行p+1時,則p指向下一個陣列元素,這

樣賦值是錯誤的:p=a;因為p是個不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它們分別是指標變數可以用來存放變數地

址。但可以這樣 *p=a; 這裡*p表示指標陣列第一個元素的值,a的首地址的值。

如要將二維陣列賦給一指標陣列:

int *p[3];

int a[3][4];

p++; //該語句表示p陣列指向下一個陣列元素。注:此陣列每一個元素都是一個指標

for(i=0;i<3;i++)

p[i]=a[i]

這裡int *p[3] 表示一個一維陣列記憶體放著三個指標變數,分別是p[0]、p[1]、p[2]

所以要分別賦值。

這樣兩者的區別就豁然開朗了,陣列指標只是一個指標變數,似乎是c語言裡專門用來指向二維陣列的,它佔有記憶體中一個指標的儲存空間。指標陣列是多個指標變數,以陣列形式存在記憶體當中,佔有多個指標的儲存空間。

還需要說明的一點就是,同時用來指向二維陣列時,其引用和用陣列名引用都是一樣的。

比如要表示陣列中i行j列一個元素:

*(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j]

優先順序:()>>*

7樓:千鋒教育

指標陣列:array of pointers,即用於儲存指標的陣列,也就是陣列元素都是指標。

陣列指標:a pointer to an array,即指向陣列的指標。

還要注意的是用法的區別,下面舉例說明。

int* a[4] 指標陣列

表示:陣列a中的元素都為int型指標

元素表示:*a[i] *(a[i])是一樣的,因為優先順序高於*int (*a)[4] 陣列指標

表示:指向陣列a的指標

元素表示:(*a)[i]

注意:在實際應用中,對於指標陣列,經常這樣使用:

typedef int* pint;

pint a[4];

這跟上面指標陣列定義所表達的意思是一樣的,只不過採取了型別變換。

**演示如下:

#include

using namespace std;

int main()

;int *a[4]; //指標陣列

int (*b)[4]; //陣列指標

b=&c;

//將陣列c中元素賦給陣列a

for(int i=0;i<4;i++)

//輸出看下結果

cout<<*a[1]<

}注意:定義了陣列指標,該指標指向這個陣列的首地址,必須給指標指定一個地址,容易犯的錯得就是,不給b地址,直接用(*b)[i]=c[i]給陣列b中元素賦值,這時陣列指標不知道指向**,除錯時可能沒錯,但執行時肯定出現問題,使用指標時要注意這個問題。但為什麼a就不用給他地址呢,a的元素是指標,實際上for迴圈內已經給陣列a中元素指定地址了。

但若在for迴圈內寫*a[i]=c[i],這同樣會出問題。總之一句話,定義了指標一定要知道指標指向**,不然要悲劇。

8樓:e時代幽默網

陣列指標,就是一個指向陣列首元素的指標,或者說是指向一個陣列起始記憶體地址的指標。

指標陣列,就是一個陣列中的所有元素型別均為指標,也就是說是一個專門用來存放一堆指標的陣列。

c中,陣列名跟指標有區別嗎

9樓:匿名使用者

其實可以認為陣列名就是一個不可更改的常量指標。但是

,嚴格來說,二者有一定區別,比如sizeof(a),a為陣列名的時候,算出來是a這個陣列所佔位元組數,但是如果a是指標,不管指向什麼,結果都是一個int的位元組數(取決於特定機器)。因而,有人認為陣列名是一個可以退化為常量指標的型別,這種退化在陣列名作為函式形參的時候表現得最為明顯,可以參考陣列名作為形參退化為指標的問題。

C指標與陣列名的區別,求助高手

首先,第一行肯定是輸出亂碼,解釋2個知識點你就知道了 1.陣列和指標的區別,其實對於你的問題這不是最重要的,不過既然你問道區別就說說吧 陣列名確實表示指向陣列首地址的指標,但這個指標很特別,它的值 指標的值指的是指標所指的地址 不能被改寫,能改寫的僅僅是其指向的內容,換句話說,陣列名只能指向陣列的首...

c語言中指標陣列和行指標的區別是什麼

int p 4 這個就是行指標 這種型別的指標p是指向一個一維陣列,這個一維陣列包含4個整形元素 但是 int a 4 p a 這種方式卻是不對的 因為p只能指向一個整型的一維陣列,不能指向一個整型資料,a所指向的正是a 0 是個整型數 實際上int p 4 這種型別的指標是用於多維陣列中的,比如定...

c語言中如何定義陣列C語言中如何定義陣列

c語言中,同變數一樣 陣列也必須先定義後使用。一維陣列的定義形式 型別識別符號 陣列名 常量表示式 例如int a 10 其中a為地址常量。如變數的定義一樣,int a double a float a等 陣列的定義只是把後面的變數名改為陣列名而已。int a 10 就是定義了一個陣列名為a的陣列 ...