C的intp與intpintp的區別

2021-03-07 00:31:01 字數 4367 閱讀 1792

1樓:匿名使用者

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

2樓:匿名使用者

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

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

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

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

3樓:朗懌

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

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

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

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

4樓:育知同創教育

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

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

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

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

5樓:刀無極啊

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

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

6樓:無聊的

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]

c語言中int *p[5]與 int (*p)[5]的區別

7樓:姓從蓉祕素

你是不想問

int*p[

]和int

(*p)

[]的區別啊[]

的優先順序高於*

所以前者表示指標陣列,而後者是陣列指標,例如int*p[6]

表示p有6個元素,每個元素又是一個int型指標變數。int(*p)[6]表示指向具有6個元素的一維int型陣列的陣列指標變數

8樓:衄潲

樓上說的是錯的,int *p[5],首先

它是一個陣列,它的大小是5,它裡面存放的資料型別是int *,也就是整型指標。 所以它叫指標陣列、 (從右向左解析這個表示)

int (*p)[5],首先p是一個指標,指向大小為5的陣列,因此這叫陣列指標。(括號優先)

這個在《c專家程式設計》裡面說的很清楚。你可以看一下。

9樓:庾詩珊趙寄

int(*p)[4];//是指向一個2維陣列的指標int**p;//是一個指標的指標

兩個都是指向地址的

int(*p)[4]

是接收二維陣列的地址(常量)

int**p

是接收指標變數的地址(變數)

我是這麼理解的,不知道對不。

10樓:貴華燦僧琛

你確定你輸入的語句沒有問題嗎?

int*p();//這是一個整型指標函式,

int(*p)();//這個不能成為語句。

11樓:陳大濤

其實我們先討論一個優先順序的問題,的優先順序高於*,這就是為什麼後者加了一個(),int *p[5]定義一個指標陣列p,講到底這個p是一個陣列,陣列內的元素是5個指標,而陣列內的每一個指標指向一個int型的變數;int (*p)[5]定義了一個指向5個元素的一維陣列的指標。

12樓:匿名使用者

第二個就是這個指標所指的值是一個大小為5個int的陣列的首地址。換句話說,p+1(陣列地址+1)代表記憶體地址下移了5個單位。

13樓:匿名使用者

int *p[5]那麼p[0]是一個int指標

int (*p)[5] 那麼p是一個指向陣列的指標

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

14樓:仁昌居士

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無法訪問得到表示引用的儲存的數值。

15樓:匿名使用者

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

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

16樓:匿名使用者

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

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

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

17樓:匿名使用者

前者是地址的指標

後者是指標的地址

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

18樓:匿名使用者

int *p[3]這個叫指標

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

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

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

例如

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

int (*p)[3]同理

19樓:倒黴熊

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;

20樓:tea醬醬

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

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

請問下在C語言中intp 與intp到底有什麼區別,我始終不太懂

樓上的回答是在不敢苟同 p 4 p 4 p的區別 由於裡面牽扯一些東西比較深,我簡單的講講吧 p 4 是指標陣列,他是陣列。陣列裡面放的是指標,簡單的說定義了4個指標,分別是 p 0 p 1 p 2 p 3 相當於將這四個指標打包到這個陣列中 p 4 是陣列指標,他是指標並且是一個指向二維陣列的指標...

在c 中,int p和int p有什麼區別

風若遠去何人留 int p為引用,而int p為定義變數。二者區別如下 1 引用在定義的時候必須賦值,否則編譯會出錯。正確的形式為int p a 其中a為int型變數。2 引用在定義時不會分配空間,只是初始化變數的一個別名。如int p a 的形式,後續對p的操作,與對a操作完全等價。 一個為指標形...

求c 大神!告訴我區別求詳細!定義指標int p p a,p ap ap

int p 表示定義一個指標 p a 說明a本身是一個地址,或者stringp a a是一個變數,表示取a的地址,p是指標,指標指向地址 p a a是一個變數,p表示p所指向的地址的內容,這是一個賦值語句,把a賦值給p所指向的地址儲存的變數 p a 表示p指向的地址儲存的值是a的地址.不建議使用.i...