c語言中,關於指標intp和intp指向二維數

2021-03-03 21:56:10 字數 6032 閱讀 7270

1樓:騎蘭皮乙

int(*p)[4];

陣列指標,每個元素都是指標,

每個元素可以指向一個一維陣列

int*

p指標, 指向一維陣列

c語言中,關於指標int(*p)[4]和int*p指向二維陣列a[3][4]初始化的問題。

2樓:匿名使用者

二維陣列相當於多行列數相同的一位陣列組合起來;int (*p)[n]定義一個行指標p,其中:

p自增1,p指向下一「行」一維陣列的首地址因為p是一個二級指標。

所以索引其指向的資料內容需要取二次內容,格式及解釋如下:

格式:*(*(p+行)+列)

解釋:其實很好理解,因為p作為二級指標,p++代表的僅僅是行號+1所以格式中*(p+行)就取到了所在行首地址指標(因為p是二級指標,取一次內容之後,取到的內容還是指標)現在把*(p+行)整體看作一個一維陣列指標再進行一位陣列的指標內容索引*(*(p+行)+列)就能索引到內容,當然也能進行初始化了!

例子:#include

void main()

/*用行指標的初始化與輸出*/

p=a;

printf("input:\n");

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

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

scanf("%d",*(p+i)+j);

printf("二維陣列\n:");

for(i=0;i<3;i++)}結果

3樓:匿名使用者

int (*p)[4];

陣列指標,每個元素都是指標, 每個元素可以指向一個一維陣列int * p

指標, 指向一維陣列

4樓:匿名使用者

還是我來告訴你吧!前者是二級地址,就是地址的地址。後者是一級地址,雖然指向的也是一個地址,但是定義的時候申明的是一級地址。

5樓:匿名使用者

int (*p)[4];p=a;int *p;p=a[i];//(i=0,1,2)

c語言中,關於指標int (*p)[4]和int *p指向二維陣列a[3][4]初始化的問題。

6樓:油菜花零

前者是二級地址,就是地址的地址。後者是一級地址,雖然指向的也是一個地址,但是定義的時候申明的是一級地址。

7樓:我是鄧大爺

二級地址是指標的指標,也就是這個指標存放的是一個指標,而不是地址。也就是int **

一級指標只是個指標 int *,這個指標存放的是一個地址

8樓:朔風荷葉

int (*p)[4]是一個陣列指標,陣列的每一個元素都是一個指標,都指向的是地址。後一個只是一個普通的指標

c語言二維陣列指標問題, 問題1:int (*p)[4]與int *p[4]有什麼不同

9樓:匿名使用者

1,前者,p是一個指標,後者p是一個陣列,差別太大,以至於沒有什麼相同的地方(⊙_⊙)

2,沒太理解問題,請用一小段**說明。

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

10樓:天雲一號

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

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

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

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

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

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

11樓:匿名使用者

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

是等價的。

12樓:

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

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

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

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

13樓:匿名使用者

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

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

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

14樓:匿名使用者

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

是等價的。

15樓:望闌珊將盡

結合性不一樣:前者是指標陣列,為4個int指標的陣列,有4個元素;後者是陣列指標,為一個指標,型別為指向包含4個int型別元素的一維陣列的指標。

編c語言時二維陣列指標形式要寫成int(*p)【4】,為什麼不能寫成int*p【4】?

16樓:匿名使用者

這裡的()有點類似於來

優先順序源

int (*p)[4]建立的是 指向int[4]型別的指標int *p[4]建立的是一個4元陣列,陣列的元素都是指向int型的指標

()優先順序的作用是不是也可以看成函式?

你可以把()當成一個返回值和輸入值相等的函式 沒問題的,雖然一般沒有人這麼說

17樓:17哥

首先來整形二維陣列的最容易懂的自寫法為:int p[2][4]; 變通一下就是bai,p是一個指du針,該指標指向一zhi個包含4個整形元素的數dao組。

那麼我們分別來看一下兩種變形有什麼不同。

首先要說的一點是運算子的優先順序,運算子的優先順序比*運算子的優先順序要高。因此要想把int p[2][4]轉變成指標,就需要用()提升*的優先順序:int (*p)[4]。

這表示p是一個指標,指向的元素是一個包含4個整形元素的陣列。因此是一個n*4的二維陣列。

int *p[4]表示的是p是一個陣列,陣列中存放的是一個整形的指標。4*1的一維陣列。

18樓:匿名使用者

這兩bai個意義不同

int(*p)【4】表示p是個du

指標,指向

zhi一個儲存四個int資料dao的空間,這就是專所謂的陣列屬指標,這裡的括號只是優先順序作用,沒有函式的意思int *p【4】 表示p是個陣列,它有四個元素,元素型別是int *指標,此之謂指標陣列

19樓:防禦

對!是優先順序的問題,int(*p)[4],是int型陣列;

而int *p[4],是指標陣列!!!

不加括號型別都變了,這就是優先順序

20樓:莫遷然

int*p[n]含義是定義指標陣列p,它由n個指向整型資料的指標元素組成;

int(*p)[n]是指向含n個元素的一維陣列的指標變數;

在譚浩強c語言書的第276頁上有詳細介紹

請問下在c語言中int (*p)[4]與int **p到底有什麼區別,我始終不太懂

21樓:鷹弈

樓上的回答是在不敢苟同

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

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

22樓:匿名使用者

int (*p)[4] 這個是

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

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

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

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

就是多了個彎而已。

23樓:劍聖來自火星

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

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

24樓:匿名使用者

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

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

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

c語言問題!int *p[4]和int (*p)[4]有什麼區別?

25樓:匿名使用者

int *p[4],就bai

是p本質上是個陣列,du只不過陣列中的每個元素zhi都是指標

daoint (*p)[4],就是p本質上是個內指標,指標指向一個一維的數容組

這種題的話,其實可以先根據運算子的優先順序、結合性,先確定識別符號本質上是一個什麼,然後再去補充

例如,int *p[3],先根據優先順序,等效於*(p[3]),所以p本質上是一個有三個元素的陣列;那麼陣列的每個元素又是什麼呢?是一個指標;那指標指向的又是什麼呢?是指向一個int型的資料;所以整理一下就是p是一個有三個指向int資料的指標的陣列,本質上就是一個陣列

26樓:t君凡

int *p[4]是定義了一個四個元素的陣列,元素型別為int的指標

後一個是定義了一個int指標,指向記憶體中4個int大小一塊區域的首地址,以四個int單位

如p++,是移動4

27樓:匿名使用者

前者指標陣列,後者陣列指標

c語言中,關於指標intp和intp指向二

前者是二級地址,就是地址的地址。後者是一級地址,雖然指向的也是一個地址,但是定義的時候申明的是一級地址。二級地址是指標的指標,也就是這個指標存放的是一個指標,而不是地址。也就是int 一級指標只是個指標 int 這個指標存放的是一個地址 int p 4 是一個陣列指標,陣列的每一個元素都是一個指標,...

c語言中關於指標intp4和intp指向二維陣列

二維陣列相當於多行列數相同的一位陣列組合起來 int p n 定義一個行指標p,其中 p自增1,p指向下一 行 一維陣列的首地址因為p是一個二級指標。所以索引其指向的資料內容需要取二次內容,格式及解釋如下 格式 p 行 列 解釋 其實很好理解,因為p作為二級指標,p 代表的僅僅是行號 1所以格式中 ...

C語言中,指標變數該如何使用呢,C語言中指標和指標變數的區別是什麼

int integer 0 為求來 地址運算子,指標用來儲存 源一些變數的bai地址 可以這樣訪du問 pinteger 得到 pinteger這個整形指標裡面的值 zhi0 建議看dao 相關的書,難懂的東西才有意義 所謂指標其實就是用來儲存地址的 就這樣想就好了 比如 int a,p p a 就...