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;} 前者是二級地址,就是地址的地址。後者是一級地址,雖然指向的也是一個地址,但是定義的時候申明的是一級地址。二級地址是指標的指標,也就是這個指標存放的是一個指標,而不是地址。也就是int 一級指標只是個指標 int 這個指標存放的是一個地址 int p 4 是一個陣列指標,陣列的每一個元素都是一個指標,... int p 4 陣列指標,每個元素都是指標,每個元素可以指向一個一維陣列 int p指標,指向一維陣列 c語言中,關於指標int p 4 和int p指向二維陣列a 3 4 初始化的問題。二維陣列相當於多行列數相同的一位陣列組合起來 int p n 定義一個行指標p,其中 p自增1,p指向下一 行 ... 3全部char用1個位元組表示,所以指標char p,p,p的值會增加1個位元組,指向下個字元 指標用4個位元組表示,所以指標的指標 p,p,p的值會增加4個位元組,指向下個指標.指標就是地址,就像可以通過你家的地址門牌號找到你家一樣,可以通過指標找到指標所指向的內容,這個內容可以是具體的資料也可以...c語言中,關於指標intp和intp指向二
c語言中,關於指標intp和intp指向二維數
關於指標變數具體什麼意思,C語言中「指標」和「指標變數」的區別是什麼??