陣列名和指標的區別是什麼C語言陣列名和指標的區別?

2021-03-07 02:24:34 字數 5853 閱讀 4886

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樓:閩忠饒俏

首先指標陣列

和陣列指標叫法本身是種誤導

指標陣列:array

ofpointers,即用於儲存指標的陣列,也就是陣列元素都是指標陣列指標:a

pointerto

anarray,即指向陣列的指標

其次他們本質一個是陣列,一個是指標

int*

a[4]

表示是一個陣列

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

元素表示:*a[i]

*(a[i])是一樣的,因為優先順序高於*

int(*a)[4]

表示是一個指標

指向陣列a的指標

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

#include

using

namespace

std;

intmain()

;int

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

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

b=&c;

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

for(int

i=0;i<4;i++)

//輸出看下結果

cout<<*a[1]<

intmain()

{int

a[5];

printf("%d\n",

a);printf("%d\n",

&a);

printf("%d\n",a+

1);//它的進階單位是1個int位元組數

printf("%d\n",

(int*)&a+1);

//它的進階單位是1個int位元組數

int(*)可以強轉為

int*

printf("%d\n",

//它的進階單位是1個int位元組數

printf("%d\n",&a+

1);//它的進階單位是整個陣列的位元組長度printf("%d\n",

&a[0]

+1);

//它的進階單位是1個int位元組數

printf("---------------\n");

printf("%d\n",sizeof(a));

//通過陣列名獲取的是陣列的大小

printf("%d\n",sizeof(&a));

//通過取陣列名獲取的是指標的大小

return0;

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

4樓:匿名使用者

陣列名確實表示指向陣列首地址的指標,但這個指標很特別,它的值(指標的值指的是指標所指的地址)不能被改寫,能改寫的僅僅是其指向的內容,換句話說,陣列名只能指向陣列的首地址,如果有陣列char a;那麼如果出現a = a+1;這是編譯都通不過的錯誤。而對於一個普通的指標是可以的,再比如有陣列char a;那麼再定義一個char *p = a;然後再用p = p+1是合法的,這表示讓指標p指向&a[1]。

它們的第二個區別是:每當用到陣列名這個指標的時候,系統都會傳入陣列的資訊,而普通的指標只是一個4位元組的整數,例如:

char a[5];

char *p = a;//指標a和指標p都指向陣列a的首地址cout << sizeof (a) << "##" << sizeof (p) << endl;

這時的執行結果是「5##4」

5樓:塞上孤獨

為什麼陣列名的那個指標不能運算,也就是你說的不能改寫,告訴你那是因為陣列一旦定義了,就放到常量區了,你試試看你能改變常量嗎?

陣列名和指標的區別

6樓:匿名使用者

可以!下面是我學習陣列和指標的總結: (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<

7樓:匿名使用者

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

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

8樓:匿名使用者

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

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

9樓:

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

int *p;

int a,b;

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

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

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

c++的指標與陣列名有什麼區別?

10樓:倒黴熊

.陣列和指標的區來別:源

陣列名確實表示bai指向陣列首地址的指du針,但這個指標很特zhi別,它的dao

值(指標的值指的是指標所指的地址)不能被改寫,能改寫的僅僅是其指向的內容,換句話說,陣列名只能指向陣列的首地址,如果有陣列char a;那麼如果出現a = a+1;這是編譯都通不過的錯誤。而對於一個普通的指標是可以的,再比如有陣列char a;那麼再定義一個char *p = a;然後再用p = p+1是合法的,這表示讓指標p指向&a[1]。

它們的第二個區別是:每當用到陣列名這個指標的時候,系統都會傳入陣列的資訊,而普通的指標只是一個4位元組的整數,例如:

char a[5];

char *p = a;//指標a和指標p都指向陣列a的首地址

cout << sizeof (a) << "##" << sizeof (p) << endl;

這時的執行結果是「5##4」

c語言,陣列名與陣列元素的關係,C語言,陣列名與陣列第一個元素的關係

主要有bai如下區別 1 數du組zhi名代表 陣列的首地址,若daoc abcdef 則陣列名c代表陣列元素內 a 的地址。2 s用於輸出一容個字串,對應的引數是陣列名 即陣列的首地址 輸出從陣列起始位置到陣列中第一個 0 之間的全部字元。2 c用於輸出一個字元,即字元的值。而陣列名是陣列的首地址...

C語言可以把指標和陣列名之間相互賦值嗎

不可以,陣列名字相當於一個const指標,不能再賦值了 不可以,c c 中 陣列名雖然形同一個指標 但是是常值 是不可以進行賦值操作的,同理 也不可以進行 操作,希望可以幫助到你 可以,不過上面的例子里長度會不同,編譯會出現警告 warning 不行,陣列名錶示的是陣列的首地址,是常量,常量是不能賦...

c語言符指標和字元陣列的區別c語言字元指標和字元陣列的區別

首先第一點,非常重要的一點 指標和陣列是不同的兩個型別!我們從可以從c語言標準文件中得知 iso iec 9899 1999 programing language c 6.2.5 types 20 這說明了什麼是陣列型別 同樣在20 說明了什麼是指標型別。在瞭解了兩種型別的基礎上,我們瞭解陣列和指...