c 陣列名和指標,C 的指標與陣列名有什麼區別?

2021-05-21 04:41:29 字數 6714 閱讀 4054

1樓:冒泡君

1.str是陣列,str相當

copy於陣列首地址。

bai2.mstr 指向 str,相當於du指向了陣列的第一個zhi地址,dao*mstr 就輸出h。

3.str只是相當於陣列首地址,但是對陣列名取地址,&str 得到的是一個指向整個地址的指標,型別是char(*)[12]. 所以第一行輸出hello world。

4. 最後 你將char* 指向一個型別是char(*)[12] 型別 當然就不對了。會報語法錯誤,你可以這樣寫 char *mpstr = (char*) &str; 強制轉換

你可以參考**理解一下,望採納!

2樓:匿名使用者

// 字元指標

cout << char_pointer; // will output the string from the address

// *字元指標 ===> 字元

cout << *char_pointer; // will output the char at the address

我們來看看

char str = "hello world";  // str is a (字元陣列)字元指標, 具體點是 a12_c, 12個字元陣列,char[12]

char *mstr = str;  // 定義新回 字元指標 mstr, 指向 str

// 這句話類答似於  cout << str << endl; 輸出字串

cout << *&str << endl; //輸出 hello

// 輸出字元

worldcout << *mstr << endl;//輸出 h 為什麼不輸出hello world???

// str 是字元陣列, &str 是字元陣列地址(pa12_c),型別是 pa12_c

char *mpstr = &str;//這裡為什麼會顯示語法錯誤???

強制轉換型別就沒問題。

3樓:匿名使用者

第一個*和&相抵消 等於沒有 就是cout <

第三個型別不同

&str這樣返回的是char** 而mpstr是個char*型別

4樓:匿名使用者

char陣列的陣列名型別為char*,輸出

5樓:匿名使用者

char *mpstr = &str;//這裡為什麼會顯示語法錯誤???

------------------------------其實是可以的, &str是一個地址值, 是str字元內串的首地址, 轉換一下就行了

容char *mpstr=(char*)&str;

printf("%s",mpstr);

6樓:等待

。。。。。。。。。。。。

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

7樓:倒黴熊

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

陣列名確實表示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」

8樓:一無志青年

指標中的資料是所需資料的地址,而陣列是將資料儲存到一個連續的儲存區

9樓:匿名使用者

ch是一個陣列。陣列名雖然也就是陣列第一個元素的地址。與指標有相似的地方你學過c嗎? 首先:1.str和ch這兩個是什麼關係,str是個指標,ch呢,是

c/c++中,陣列名和指標的區別

10樓:匿名使用者

一維陣列 可以認為是常量一維指標. 即除了不能修改值, 其他都可以當指標操作.

多維陣列, 可以認為是對應的陣列指標.

陣列名和指標最大的區別是, 陣列名自身不佔用記憶體空間, 即&陣列名得到的地址還是陣列名值本身, 亦即陣列首地址. 而指標是有自己的記憶體空間的, &指標變數, 得到的是另外一個地址.

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

11樓:手機使用者

可以!下面是我學習陣列

和指標的總結: (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<

12樓:查有福季嫣

可以。a是陣列名,相當於陣列的首地址,b是一個指標,int*b=

a;然後b就指向a這個地址,呼叫b[4]就是b+4的地方,也就是a+4這個地方,然後就是同一個地方,所以b[4]等價於a[4]

13樓:閩忠饒俏

首先指標陣列

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

指標陣列: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++陣列名到底是什麼呢?是不是地址?為什麼可以賦值給指標? 5

14樓:

是的,陣列名是地址,是第一個元素的地址——一維陣列的陣列名就是下標為0的那個元素的地址;二維陣列的陣列名就是下標為0的那一行的地址……

陣列名和指標的區別?

15樓:百度使用者

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

陣列名與指標有太多的相似,甚至很多時候,陣列名可以作為指標使用。於是乎,很多程式設計者就被搞糊塗了。而許多的大學老師,他們在c語言的教學過程中也錯誤得給學生講解 陣列名就是指標 這種誤解的根源在於國內某著名的c程式設計教程 出版量最多的那本破書 陣列名的內涵在於其指代實體是一種資料結構,這種資料結構...

c語言中陣列名及陣列元素名有何區別

例如char a a是代表整個陣列,a 0 a 1 a 4 各自代表其中的一個數.嚴格來說,a是一支指向char的指標.a就是a 0 a 1 就是a 1 a 4 就是a 4 int array 3 上式中,array就是陣列名,你說的陣列元素名應該是array 0 或array 1 array 2 ...

c語言陣列與指標問題,c語言陣列與指標的問題關係請教

1,書上說的不準確,陣列應該看做一種獨立的型別,sizeof只與型別有關。詳細的可以參考這個 http 如果你弄明白了這個剩下就簡單了。2,我先說一下結論吧。按照你的要求應該這樣定義p int p 3 因為你想要的是訪問每一行的數字,所以需要p為整型指標的陣列,這樣每個元素是整型指標,可以像p 1 ...