c中intp和intp有什麼區別

2021-03-04 04:59:51 字數 5284 閱讀 7202

1樓:無聊的

int *p[3]是定義了乙個名為p的陣列,裡面有三個型別為int*的元素。

也就是p[0],p[1],p[2]分別儲存了乙個int*;

而int (*p)[3]是定義了乙個指向有三個元素的int型別陣列的指標,比如說

int a[3];

int (*p)[3]=&a;

那麼(*p)[0]就是a[0]

int *p[3]和int (*p)[3] 的區別,舉例說明一下.

2樓:匿名使用者

這兩個其實是數字指標和指標陣列的區別。我們乙個乙個來說明:

(1)int*p[3];//定義了乙個三維陣列,其中的每個元素p[0]、p[1]、p[2]都是指向int變數的指標。

(2)int(*p)[3];//定義了乙個指標,這個指標是指向乙個三維陣列的。

兩者之間的區別和聯絡可以用乙個二維陣列來闡述:

int *p[3];//定義p[3]為指標陣列;int (*q)[3];//定義q為陣列指標;int a[4][3];//定義乙個二維陣列

p[0]=&a[0][0];//可以取a[4][3]中任意元素的位址給p[3]中的元素賦值。q=a[1];//a[1]其實是乙個三維陣列,其元素包括a[1][0],a[1][1],a[1][2],所以 //a[1]就表示這個陣列的首位址,這個位址可以用來給q賦值。

擴充套件資料:

舉例說明如下:

(1)陣列指標:

int a[3][4]=;int (*p)[4];p=(int(*)[4])a;for(int i=0;i<3;i++)printf("\n");}

(2)指標陣列:

int ix=0;int i=0,j=0;int a[3][4]=;

int *p[3];for(ix;ix<3;ix++)p[ix]=a[ix];for(i;i<3;i++)printf("\n");}

3樓:薰衣草的旋律

int *p[3] p是乙個陣列,此陣列有3個元素,每個元素都是int*型別,也就是指向整型資料的指標型別。

int a=10,b=20,c=30;

int*p[3]=;

而int(*p)[3]中的p是乙個指向陣列的指標,此陣列有3個int型別的元素。例如:

int a[3]=; 那麼p就是指向這個陣列a的指標。

int(*p)[3]=&a; // 這裡賦值一定要用取位址符號。也就是取陣列a的位址。

不可以這樣賦值: int(*p)[3]=a; // error :型別不相容。a本來是陣列型別,是不可以賦值給int(*)[3]這個型別的。

但是這樣是可以的int *p1=a; // ok 因為a可以隱式轉換為int*型別,其值實際上就是陣列第乙個元素的位址,也就是&a[0]

4樓:匿名使用者

*p[3] 這個是乙個

指標陣列 它所代表的意思是每乙個元素都相當於乙個指標變數而(*p)[3] p是乙個指標變數,表示指向含有3個整型元素的一維陣列

前者可以類似於二維陣列 把它看成是由3個一維陣列組成的 經常與字串搭配使用 比較方便操作 把多個字串放在乙個指標陣列中

後者是用來引用二維陣列的 像a[2][3]這個二維陣列 我們既可用指標來引用 又可用(*p)[3]來引用 一般使用(*p)[3]

5樓:林聲飄揚

#include

int main()

;int *p[3] ;//表示存貯是3個整型變數位址;

int (*q)[3]; //表示指向3個整型陣列元素的一維陣列指標//把第一行三個元素位址存放在p指標陣列中for( i=0;i<3;++i)

p[i]=&a[0][i];

//輸出指標陣列中位址所對應值

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

cout<< *p[j]<<" ";

cout<

q=a;//把陣列a開始位址賦給指向一維陣列q;

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

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

cout<< *(*(q+i)+j)<<" "; //輸出陣列中元素return 0;}

c++的int (*p)[3]與int *p,int**p的區別

6樓:匿名使用者

int *p是指標,指向乙個int型別;int **p是指標的指標指向int *型別(理解方便,可以理解為int *型別);int (*p)[3] 是指標的指標(二維陣列指標),指向乙個陣列,而陣列內容指向乙個一維含3個元素的陣列,簡單講即*p指向int[3]型別,當然*(p+1)....*(p+n)都指向乙個一維含3個元素的陣列,p本身指向乙個陣列。

new int[5][5]編譯是通不過的,二維動態陣列不是這樣分配的,需要先申請int *型別陣列,陣列的元素再賦值為int [5]型別的資料即

int **p=new int*[5];

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

p[i] = new int[5];

7樓:匿名使用者

int (*p)[3]表示p是個指向維度為3的二級指標相當於乙個n行3列陣列a[n][3],每一行的首位址;

int *p表示乙個指向整形的指標;

int**p表示乙個二級指標;

其中int (*p1)[3]與int**p2都是二級指標,對於二維陣列來說我覺他們最大區別就是p1只能指向列數為3的二維陣列的首位址;而p2可以指向任意二維陣列首位址;同時要注意他們兩者之間+ 、++ 等運算子的規律也不一樣

8樓:朗懌

int (*p)[3],p是乙個陣列指標

int *p; p是乙個指標變數

int **p; p是乙個二級指標

int *p[3]和int(*p)[3]的區別

9樓:匿名使用者

int *p[3]這個叫指標

陣列,本質上是乙個陣列,陣列元素型別是指向int型的指標

int (*p)[3]這個叫陣列指標,本質上是乙個指標,指標指向的是乙個有3個int型元素的一維陣列

對於這種問題最簡單的方法是結合運算子優先順序/結合性,先確定定義的本質是什麼,然後再由內向外一層層理解

例如

int *p[3] ,有運算子優先順序/結合性可知,等效於int *(p[3]),那麼首先可以確定,p的本質是乙個有3個元素的陣列,那麼陣列元素的型別是什麼呢,往外看可知,為指標型別,那麼指標指向的型別又是什麼呢,再往外看,可知為int,所以最後整理下就可以知道p是乙個有三個元素的陣列,該陣列元素型別為指向int的指標

int (*p)[3]同理

10樓:倒霉熊

int *p[3] p是乙個陣列,此陣列有3個元素,每個元素都是int*型別,也就是指向整型資料的指標型別。

int a=10,b=20,c=30;

int*p[3]=;

而int(*p)[3]中的p是乙個指向陣列的指標,也就是說它指向的不是乙個數,而是乙個陣列, p是指標,指向[3]個大小的陣列···如 int a[2][3]; int (*p)[3]; p=a;

11樓:tea醬醬

int *p[3]是乙個陣列 其中有三個元素 元素是指標

int(*p)[3] 是乙個指標 該指標指向乙個存有3個整形的陣列

int *p[3] 與 int (*p)[3]的區別?

12樓:匿名使用者

int *p[3] 是乙個陣列,有3個成員,其成員是指向整型的指標。

int (*p)[3]是乙個指標,它指向乙個有3個整型的陣列。

可以用sizeof來測試兩個的大小。

13樓:匿名使用者

int *p[3]應該是指標陣列,是長度為3,型別為整型的陣列,陣列中的元素是指標;而int (*p)[3]這是陣列指標,表明了p是乙個指標,它指向長度為3的整型陣列的首位址,大概就這個意思吧

14樓:匿名使用者

前乙個是一維指標的陣列,就是陣列裡邊的每個元素都是乙個指標

後乙個是乙個指標,他指向的是乙個包含三個元素的陣列。

具體看參考資料

15樓:匿名使用者

其實,自己用編譯器跟蹤一下就很清楚了

16樓:匿名使用者

c++中int*&p和int&*p的區別

17樓:仁昌居士

c++中int *&p和int &*p的區別為:性質不同、 使用不同、訪問不同。

一、性質不同

1、int *&p:int *&p是指標的int型別引用。

2、int &*p:int &*p是引用的int型別指標。

二、 使用不同

1、int *&p:int *&p是指標 的 別名 ,可以當成指標使用。

2、int &*p:int &*p指標不能指向引用,不具有確定的儲存,無法直接使用。

三、訪問不同

1、int *&p:int *&p可以直接訪問得到指標指向的數值。

2、int &*p:int &*p無法訪問得到表示引用的儲存的數值。

18樓:匿名使用者

int &*p; 是不正確的,*與p靠得最近,所以p是乙個指標,但是這個指標的型別是int &,所以這個是錯吳的, 因為不能建立引用的指標。

int *& p, 是正確的, &與p靠得最近,所以p是乙個引用,這個引用的型別是int*,也就是乙個指標變數的引用,但是必須初始化,否則也是錯誤的。.

19樓:匿名使用者

如果按照正常的解讀(從右到左),

int*&p 是 指標的引用。 他是乙個 指標 的 別名,一般可以當成 指標 使用。有時候,可以直接他的值,成為其他指標的引用

int&*p 是 引用的指標,這個是非法的,指標不能指向引用。引用不具有確定的儲存,無法間接訪問得到表示引用的儲存的左值,所以乾脆人為規定禁止構造指向引用的指標型別。

20樓:匿名使用者

前者是位址的指標

後者是指標的位址

intp和intp有什麼區別我想知道intp與intp有什麼不同

int p表示的 是一級指標,表示p所指向的位址裡面存放的是乙個int型別的值。int p表示的是二級指標,表示p所指向的位址裡面存放的是乙個指向int型別的指標。一級指標存放變數的位址,指向的值是變數的內容。如int p p 陣列的首位址,p 陣列的第乙個值 二級指標存放一級指標的位址,指向一級指...

C中USING和「引用」資料夾的作用有什麼區別

引用是把第三方專案或dll加入在本專案中.using是引入不同命名空間的類.如果不是當前專案的dll,必須先引用,才能using c 中using和 引用 資料夾的作用有什麼區別?10 引用 的目標是檔案,而using的目標是內容。using 語句定義乙個範圍,在此範圍的末尾將處理物件。其主要功能是...

C語言的錯誤,C語言中的錯誤和警告有什麼區別

語法錯誤,return前面缺少分號,上面一句printf最後沒加表示語句結束的分號 話說要學程式設計還是把英語練練吧,這麼簡單的英文提示都看不懂,以後比較麻煩 錯誤會導致程式無法編譯通過,進而不能執行而警告是說程式中有些 編寫不是非常恰當,不會影響程式編譯,在少數情況下會影響程式執行一般警告可以忽略...