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

2021-03-10 18:13:12 字數 6093 閱讀 5989

1樓:匿名使用者

二維陣列相當於多行列數相同的一位陣列組合起來;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++)}結果

2樓:匿名使用者

int (*p)[4];

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

指標, 指向一維陣列

3樓:匿名使用者

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

4樓:匿名使用者

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

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

5樓:騎蘭皮乙

int(*p)[4];

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

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

int*

p指標, 指向一維陣列

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

6樓:油菜花零

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

7樓:我是鄧大爺

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

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

8樓:朔風荷葉

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

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

9樓:匿名使用者

這裡的()有點類似於來

優先順序源

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

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

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

10樓: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的一維陣列。

11樓:匿名使用者

這兩bai個意義不同

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

指標,指向

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

12樓:防禦

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

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

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

13樓:莫遷然

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

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

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

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

14樓:匿名使用者

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

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

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

15樓:天雲一號

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

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

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

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

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

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

16樓:匿名使用者

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

是等價的。

17樓:

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

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

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

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

18樓:匿名使用者

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

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

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

19樓:匿名使用者

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

20樓:一樹的果

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

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

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

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

21樓:匿名使用者

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

(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");}

22樓:薰衣草的旋律

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]

23樓:匿名使用者

*p[3] 這個是一個

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

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

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

24樓:林聲飄揚

#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語言中,關於指標intp和intp指向二

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

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

int p 4 陣列指標,每個元素都是指標,每個元素可以指向一個一維陣列 int p指標,指向一維陣列 c語言中,關於指標int p 4 和int p指向二維陣列a 3 4 初始化的問題。二維陣列相當於多行列數相同的一位陣列組合起來 int p n 定義一個行指標p,其中 p自增1,p指向下一 行 ...

關於指標變數具體什麼意思,C語言中「指標」和「指標變數」的區別是什麼??

3全部char用1個位元組表示,所以指標char p,p,p的值會增加1個位元組,指向下個字元 指標用4個位元組表示,所以指標的指標 p,p,p的值會增加4個位元組,指向下個指標.指標就是地址,就像可以通過你家的地址門牌號找到你家一樣,可以通過指標找到指標所指向的內容,這個內容可以是具體的資料也可以...