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 2 是說把n陣列的2個元素全部歸零。由此我們可以總結為 int n a 同樣也就是把n的a個元素全部歸零 p n就是個int 指標變數,將變數名分開,為了編寫,閱讀程式易懂,p代表指標,n代表整型變數,p n自然就代表 整型的指標變數 定義乙個陣列n,它有兩個元素乙個是n 0 乙個是n ... int a 4 a表示a 0 的位址char str 4 asd str表示 字串 asd 非等號後面的 asd 的首位址,是版str 0 的首位址,是 a 的首位址 cout 個字串,cout對於字串就是這樣處理的,輸出字串內容 而a輸出的是a 0 的位址 cout對於非字串,就會輸出陣列名所表示... 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...int n 20表示什麼意思
c陣列名表示陣列的首位址,對於字元陣列,陣列名表示什麼
VB陣列問題,vb陣列問題