intp和intp的區別intp3和intp3的區別

2021-03-07 00:31:01 字數 3853 閱讀 5647

1樓:匿名使用者

int *p[3]這個叫指標

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

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

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

例如

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

int (*p)[3]同理

2樓:倒黴熊

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;

3樓:tea醬醬

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

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

const int *p和int * const p的區別

4樓:育知同創教育

const int *p和int * const p的區別如下:

const int *p表明指向的物件是const型,不可以修改,但是指標p的指向可以修改。

* const p表明指標變數p是const型,它的指向不可修改,但是指向的物件可以修改。

一般來說用*限定的是指標區域存放的內容,不用*的是記憶體地址。

5樓:刀無極啊

你可以看看這篇文章,講的很仔細

「int **p」和「int *p」有什麼區別?

6樓:怕不他啊不了

int *p表示的是一級指標,表示p所指向的地址裡面存放的是一個int型別的值。

int **p表示的是二級指標,表示p所指向的地址裡面存放的是一個指向int型別的指標。

一級指標存放變數的地址,指向的值是變數的內容。如int* p=, p=陣列的首地址,*p=陣列的第一個值;

二級指標存放一級指標的地址,指向一級指標。如int*p =, int**pp=&p,pp=指標p的首地址,*pp=陣列的首地址,**pp=陣列第一個值1。

指標陣列的陣列名傳遞引數對應為指標的指標即二級指標,二維陣列的陣列名傳遞引數對應為陣列指標即指向一維陣列的指標

一級指標通過形參,可以修改實參中指標所指向的地址中的值。修改不了實參中指標所指向的地址。需要藉助二級指標才可以。

7樓:尉詩桃牟畫

int*p

:一級指標,表示p所指向的地址裡面存放的是一個int型別的值int**p

:二級指標,表示p所指向的地址裡面存放的是一個指向int型別的指標(即p指向的地址裡面存放的是一個指向int的一級指標)

例如:int

i=10;

//定義了一個整型變數

int*p=&i;

//定義了一個指標指向這個變數

int**p1=&p;

//定義了一個二級指標指向p指標

那麼取出10的值方式為:

printf("i=[%d]\n",*p);

printf("i=[%d]\n",**p1);

c++中int *p[3]和int (*p)[3]有什麼區別

8樓:無聊的

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] 有什麼區別呀?

9樓:好紅客

int p[3] 是定義了一個整型陣列 p ,陣列大小為 3

int (*p)[3] 是定義了一個陣列指標 p ,用於指向一個大小為 3 的整型陣列

還有疑惑,可以 hi 我!

10樓:匿名使用者

變數申明的組copy成結構:

型別 變數名

首先這兩bai個變du量申明都是一個長度為3的陣列的:zhi[3] 相同點刨除不看dao,下面看不同點:

前者的型別為 int (*) 變數名為p

後者的型別為 int 變數名為p

很明顯,差異在於:前者申明的是一個int型的指標,而後者申明的是int型整數

11樓:匿名使用者

我覺bai

得不肯能出現這種情況首

du先有括號所以先執行zhi*p,表明p是個指dao針變數,而int p[3]p是個專陣列名,陣列名是屬個地址常量,所以這兩個不肯能出現在一起的,這就好比兩個不同程式裡只因為識別符號相同就相互比較,比較起來有什麼意義嗎?

12樓:匿名使用者

int a[3]

int (*p)[3]

那麼可以 p=a來操作a

a是陣列,p是陣列指標

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

13樓:匿名使用者

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];

14樓:匿名使用者

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

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

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

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

15樓:朗懌

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

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

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

C語言中intp與intp的區別

經過兩天的上機試驗和自己的推理,我要感謝的是dukehhh同志,我是沿著你的想法推理下去的,你的想法是正確的,而且我還幫你進行了補充 int p 是一個指標變數,與之相對應的是int p n int p 4 是指向一個2維陣列的指標,與之相對應的是int p 4 int p 是指向一個指標的指標 與...

C語言中的intp的理解,int p 怎麼理解啊??

如果要連續定義兩個指標應該是怎樣做呢?如果是第一種理解,則為 int p,q 但是測試結果,p是int指標,而q是int型別,不是指標。所以第一種理解錯誤,實際上要連續定義兩個指標必須 int p,q 所以這樣看第二種理解更靠譜一些,雖然我感覺還是有些牽強,因為這句 而 p為對p取地址,和 抵消了 ...

c 中INT和INT返回有什麼區別具體點啊

c語言系列都是 case sensitive 區分大小寫 的,不知道你到底是問int還是int 一,如果你問的是int int是宣告整形變數的keyword int 是別名,一般用在函式的 list of parameter 中,表示對int型變數的引用,如 還有下面的情況 int a 15 int...