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

2021-03-27 07:39:31 字數 5663 閱讀 1592

1樓:鷹弈

樓上的回答是在不敢苟同

*p[4]、(*p)[4]、**p的區別(由於裡面牽扯一些東西比較深,我簡單的講講吧)

*p[4]是指標陣列,他是陣列。陣列裡面放的是指標,簡單的說定義了4個指標,分別是*p[0] *p[1] *p[2] *p[3],相當於將這四個指標打包到這個陣列中

(*p)[4]是陣列指標,他是指標並且是一個指向二維陣列的指標。因為以行為單位,又稱行指標。

通俗點講,後面的[4]說明他的每行有4個元素,[0]代表第一列的下標,[1]代表第二列的下標,一次類推。(*p)的意思是指標p指向第一行,*(p+1)即指向第二行,同理一次類推。那麼*(p+2)[3]的意思即是指二維陣列第二行第四列的元素

**p是二級指標,即指向指標的指標,他也是一個指標,主要區別在於應用的範圍不同,行指標作用物件僅僅是二維陣列,二級指標的應用範圍就廣了,比較典型的就是他可以用指標引數傳遞記憶體,指標陣列和陣列指標可沒有這樣的用法。也可以用他動態申請記憶體,儲存二維陣列元素等等

樓主耐心學習吧,只要堅持下去,這些東西都會慢慢理解的

2樓:匿名使用者

int (*p)[4] 這個是

指標陣列。裡面存的是 4個int指標。陣列名字叫p 。這裡主要注意一下下優先順序

()的優先順序相同。結合方向是從左到右。所以先跟() 結合。int *p[4] 如果是這樣就是 陣列指標了。

int **p 是個二維指標。其實很好理解,打個比方。比如你的資料存在地址 2000 號中。

你要從從2003號記憶體裡找2000號記憶體。二維指標就是這樣的。從2003 存的地址找到2002 再從2002存的地址找到2000。

就是多了個彎而已。

3樓:劍聖來自火星

int (*p)[4] 是指向一個p[4] 的陣列

int **p 等價於int *p[4]

4樓:匿名使用者

int (*p)[4] 中p是陣列指標,指向一個int 的二維陣列,第二維長度是4

int **p 中p可以指向任意長度的一個int二維陣列,第二維長度不一定要是4

int *p[4] 是指標陣列,p是一個陣列,他的成員是int指標。

c語言中 int*p[4] 和 int(*p)[4]的區別

5樓:天雲一號

int *p[4]; //定義一個指標陣列,該陣列中每個元素是一個指

針,每個指標指向**就需要程式中後續再定義了。

int (*p)[4]; //定義一個陣列指標,該指標指向含4個元素的一維陣列(陣列中每個元素是int型)。

區分int *p[n]; 和int (*p)[n]; 就要看運算子的優先順序了。

int *p[n]; 中,運算子[ ]優先順序高,先與p結合成為一個陣列,再由int*說明這是一個整型指標陣列。

int (*p)[n]; 中( )優先順序高,首先說明p是一個指標,指向一個整型的一維陣列。

6樓:匿名使用者

int*p[4]是指標的陣列,也就是說它是一個陣列,陣列裡存的是一個個的指標

int(*p)[4]是陣列的指標,也就是說它是一個指標,指向的是一個陣列。指標指向的型別會影響到指標加減運算時地址的位移。比如說有一個陣列 int a[4],加上取址運算子 &a,這個表示式的型別就是指向陣列的指標,可以這樣賦值 p = &a;。

一般用於向函式傳遞二維陣列的時候使用這種型別,這時還有一種更直觀的寫法

void matrix_sum(int matrix_a[4], int matrix_b[4])

這種寫法和

void matrix_sum(int (*matrix_a)[4], int (*matrix_b)[4])

是等價的。

7樓:

int* p[4] // 4個元素的

陣列,元素為int型別的指標

int (*p)[4] // p是一個指標,它指向 4個int型元素的陣列

int (&p)[4] // p是引用, 它引用 4個int型元素的陣列.

8樓:匿名使用者

int *p[4] 是一個存int* 的一維陣列

int (*p)[4] 是一個int 陣列 *p指向a[0]

c語言int (*p)[4]和int *p[4]區別 10

9樓:匿名使用者

int *p[4], 是一個長度為4的指標陣列,陣列的元素為int*;

sizeof(p) => 4*4 = 16;(32位系統一個指標4位元組)

用法:*(p[0])

int (*p)[4] 是一個指向長度為4陣列的指標,即int(*)[4];

其本質是一個指標,如在32為系統上,sizeof(p) => 4用法:(*p)[0].

10樓:一樹的果

第一個是指標陣列,第二個是陣列指標。區別是他是一個指標還是多個指標。

陣列指標只是一個指標變數,似乎是c語言裡專門用來指向二維陣列的,它佔有記憶體中一個指標的儲存空間。指標陣列是多個指標變數,以陣列形式存在記憶體當中,佔有多個指標的儲存空間。

int (*p)[4]就相當於int p[4],它就是一個二維陣列的指標,可以指向一個第二維度為4的二維陣列

int **p和int *p有什麼區別

11樓:怕不他啊不了

int *p表示的

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

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

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

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

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

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

12樓:匿名使用者

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

13樓:匿名使用者

int (*p)(); //函式指標,這個指標可以指向不同的函式,但是必要條件是引數與返回值都為void型

若定義了一個這樣的函式: int fun();

則這樣賦值: int (*p)() = fun;

再這樣呼叫: p();

int *p(int x,int y) //指標函式,是個函式引數為兩個int變數,它的返回值是一個int的指標

若定義了一個這樣的函式: int *p(int x,int y);

則這樣賦值: int *ptr = p(4, 5);

14樓:匿名使用者

int (*p)()是一個int型別的無引數的函式指標,它指向的是一個函式,它是用來存放無形參函式**首地址的變數,也就是說在賦值的時候給p一定要賦一個函式;而int *p(int x,int y)是一個返回值為int型的簡單的帶有兩個形參的指標函式,和普通函式不同的是它是一個指標函式。簡單說前者是一個變數,而後者是一個函式!

15樓:hello你個

int *p是一級指標,表示p指向的記憶體中存放的是一個真型變數,int **p是二級指標,表示p指向的記憶體種存放的是一個整形的指標變數

16樓:匿名使用者

本質上沒有區別,但字面理解容易模糊。比如

int *p,i;// 很明顯,p是指標,i是變數int* p,i; // *緊挨著int,那麼*屬於p還是屬於p和i呢?(當然不是),還是屬於p,但看上去不是那麼清晰。

所以推薦的是int *p,i;,而不是int* p,i;。

17樓:匿名使用者

胡說,誰說的int *p(int x,int y)是一個返回值為int型的簡單的帶有兩個形參的指標函式?這分明是以個返回型別為整型指標(int*)的一個帶有兩個整型引數的普通函式。您這麼理解int* p(int x,int y)就好理解了。

18樓:匿名使用者

int (*p)() 是定義一個儲存某類函式(int fun())入口地址的指標.

int *p(int x,int y) 是宣告一個返回整型指標的函式(p).

19樓:匿名使用者

int (*p)(int)是函式指標,如:

int func(int x); /* 宣告一個函式 */int (*f) (int x); /* 宣告一個函式指標 */f=func; /* 將func函式的首地址賦給指標f */int* p(int x);是一個返回值為int型指標的函式的宣告

20樓:匿名使用者

int **p指向的是一個指向int型的指標陣列

int *p指向的是一個int型資料望採納

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

21樓:姓從蓉祕素

你是不想問

int*p[

]和int

(*p)

[]的區別啊[]

的優先順序高於*

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

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

22樓:衄潲

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

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

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

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

23樓:庾詩珊趙寄

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

兩個都是指向地址的

int(*p)[4]

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

int**p

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

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

24樓:貴華燦僧琛

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

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

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

請問c語言中點號的作用,請問C語言中點號的作用?

點號多是表示點號前面的成員變數或者成員函式,有時也可可表示指標 多是 表示 結構體等等,看多了 寫多了就瞭解了 在c語言中,點有以下作用 1 用來做小數點。在表示實數時,用來做小數點,如1.23。2 結構體,共用體型別訪問元素用。如struct test 定義變數 struct test m 則m....

c語言 內容如下,c語言中 與 的區別

因為如果沒有換行符號,這兩個printf在一行連續輸出 你在printf i am a computer n 加上一個換行符就可以讓這一句單獨一行了 求c語言 設計一個選單程式,包括3項內容如下,1 單日票 2 聯票 0 退出 include include void fun1 void void ...

c語言a與65的區別,C語言中a與a的區別是什麼?詳細一點,謝謝!

你這道題到底是想幹嘛?首先沒講明白程式的目的。看起來像是想進行大小寫轉換。看起來好像沒什麼錯誤。如果確實有錯誤的話,那估計是s字串沒有進行初始化。在gets之前加一句 memset s,0,sizeof s 檔案開頭加一句 include 哦!還有一個,是小寫字母的時候,要用減32,大寫字母的時候,...