陣列 int n310,20,30,40,50,60請問指標 p 表示的是哪個數

2021-04-29 06:04:10 字數 6240 閱讀 3048

1樓:匿名使用者

要知道p是如何定義的,初值是多少,才能知道是哪個數。

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

2樓:匿名使用者

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

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

3樓:薰衣草的旋律

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]

4樓:匿名使用者

*p[3] 這個是乙個

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

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

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

5樓:林聲飄揚

#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 *p[10] 和 int (*p)[10]的問題

6樓:紫彩萬水

* 的名稱是取值運抄算符,襲

它的優先順序比 [ ] 低,因此導致了 *p[10] 和(*p)[10] 意義不同,

*p[10] 即 *(p[10]), p 先與 [10] 結合,成為 p[10] 陣列,說明 p 是乙個陣列,再取 p 陣列的值,乙個指標肯定不夠,所以需要十個指標,*p 就是指標陣列了。

(*p)[10] , p 先與 * 結合,即取 p 的值,乙個值 p 和乙個陣列下標[10]結合,這是什麼?

不妨令 p=a;那麼 p[10]=a[10] ,這就是乙個陣列啊,而 a 是 a[10] 的什麼?名稱!所以

p 就是 p[10] 陣列的名稱 、存放陣列位址。

最好記的方法還是直接讀,*(p[10])陣列,指標,反過來:指標陣列

(*p)[10] 指標、陣列,反過來:陣列指標

你第乙個念出來的就是它的名稱,第二個念出來的就是它的型別了。

誰讓這c語言是個人主義(說好聽點就是民主主義)國家發明的呢,姓名倒置,先呼名,後呼姓,正好與中國思維相反,我們是先顧大我,後顧小我的團結精神。

7樓:

int *p[10] 表示指標陣列,有

bai10個元素,

du每個都是指向整型變數zhi的指標dao。

int (*p)[10]表示行指標,指向一行回有10個元素答的指標,其型別與二維陣列名相同。如,可以這樣使用。

int a[2][10];

int (*p)[10]=a; //p指向陣列a的首行。

8樓:匿名使用者

1. int *p[10]中p是

乙個陣列

。可以理解為 int *(p[10]),先定義乙個一維陣列,再看括號外,陣列中每回個變數都是int型指標。答

2. int (*p)[10]中p是乙個指標。它的型別是:指向int x[10]這樣的一維陣列的指標。

這樣說lz是否能覺得清晰些。

main() {int a[4]={10,20,30,40},*p=a;printf('%d\n",*p++);printf("%d\n",++*p);} 求詳解

9樓:匿名使用者

p指向數bai

組a的首位址,du 假設這個4對括號表zhi示陣列a的記憶體,那麼dao10,,20,30,40就分別存在裡面[10] [20] [30] [40], 而p指向其首專位址屬,也就是指向了 [10]存的地方

*p++; 可以理解為 取*p的值,本句執行完再進行++所以printf("%d\n",*p++);

你可以理解為printf("%d\n",*p);

p++;

自然輸出p處的內容就是10

上文說p++後,其指向了第二個元素的記憶體位址,即[20]++*p

由於*解引用,也就是取p處內容的操作符優先順序高,所以先執行,*p為20

++是對*p的值進行++所以,結果為21

printf("%d\n",++*p);

10樓:匿名使用者

#include

void main()

;int *p=a; //*p是乙個指標,並且定義指標p指向陣列a的首位址(即a[0])

printf("%d\n",*p++); //printf是乙個輸出函式專,輸出*p++指向的內容屬,因為*p=a[0]=10,(注意輸出*p++是先輸出*p的值,在執行++,改變指標的指向,即*p的指標指向a[1];)

printf("%d\n",++*p); //此時的*p=a[1]=20,,++*p則是先執行++,再輸出值(21),即20+1=21.

你那上面的**有問題

11樓:匿名使用者

這個主要考察操作符運優先算級別。*和++處於同一級別,而且都是右結合回

的。所以對於第乙個列印,答*和p先結合後,既是*p也就是陣列a第乙個元素的值:10,然後和++結合,移到陣列a第二個元素,也就是20;然後*和p,也即是*p,也就是第二個元素20的值,然後和++結合,所以輸出21。

12樓:匿名使用者

*p=a是定義了乙個指標,並把陣列的位址給了p。前乙個printf是逐一輸出陣列a中的元素,後乙個也是一樣的,只是輸出少了第乙個陣列元素而已

希望能幫到你吧

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

13樓:匿名使用者

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

14樓:匿名使用者

int (*p)[4];

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

指標, 指向一維陣列

15樓:匿名使用者

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

16樓:匿名使用者

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

若有以下說明:int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;則對陣列元素位址的正確表示是( )?

17樓:匿名使用者

編譯時 a &(a+1) 有問題, & 其實 是取位址操作6 30 c:\untitled1.c [error] lvalue required as unary '&' operand

b.a++ 也有問題

7 28 c:\untitled1.c [error] lvalue required as increment operand

c.&p 這個是表示 指標變數 p 的位址此題正確答案 是 d a+1,其實 是 陣列元素 a[1] 的位址,a[0] 的位址就是 a+0 就是 a

18樓:匿名使用者

陣列元素2的位址,可以用 a+1 表示。

應選d。

若有定義:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},(*p)[4];p=a; ,( )對陣列a元素的引用是正確的。

19樓:處搖胼手胝足

a。a陣列的長度是3,*(p[4])和**(p+4)都會造成超出位址範圍

(**p)[2]表達不正確

*(p[2]+3) 是a[2][3];

20樓:匿名使用者

int (*p)[4];表明p是行指bai針,即p指向二維陣列中的一du行。zhi

p=a;這一句表示

daop指向a[0],也就是

版指向a陣列第0行的第0個元素權

(a[0][0])的位址。

p[2]表示p指向a陣列的第二行,即指向a[2]行,也就指向a[2][0]的位址。

p[2]+3表示行指標指向a陣列的第二行(從第0行開始),(從0開始)第3個元素,也就是a[2][3],*(p[2]+3)表示第2行,第3個元素的值。

p+4表示第四行(從0行開始),因為a陣列沒有第四行,所以是錯的。

p[4]表示第四行(從0行開始),原因同上。

*p表示a陣列第0行,第0列位址,**p表示a[0][0]的值,值不會再包含元素,所以(**p)[2]是錯的。

int n 20表示什麼意思

int n 2 是說把n陣列的2個元素全部歸零。由此我們可以總結為 int n a 同樣也就是把n的a個元素全部歸零 p n就是個int 指標變數,將變數名分開,為了編寫,閱讀程式易懂,p代表指標,n代表整型變數,p n自然就代表 整型的指標變數 定義乙個陣列n,它有兩個元素乙個是n 0 乙個是n ...

c陣列名表示陣列的首位址,對於字元陣列,陣列名表示什麼

int a 4 a表示a 0 的位址char str 4 asd str表示 字串 asd 非等號後面的 asd 的首位址,是版str 0 的首位址,是 a 的首位址 cout 個字串,cout對於字串就是這樣處理的,輸出字串內容 而a輸出的是a 0 的位址 cout對於非字串,就會輸出陣列名所表示...

VB陣列問題,vb陣列問題

3一共4個 一維0,1,2 所以上面可以變成下面這樣dima 0 to3,0to 5 as integer 0,5 as integer 2 to1 預設情況下 陣列下標從0開始 dima 3,1 也4個三維6個 二維 2,1,2to1 vb陣列問題 正規答案應該是c,a b的成員個數都超過9個,d...