1樓:匿名使用者
將陣列首地址直接賦值給指標即可。
2樓:匿名使用者
兩個問題:
1.輸入k之後 ,要重新將 p 指向 a 即10行前+一句 p = a;
2.最後一個for越界,i=9 時 p+i+1 就成了 p+10
3樓:貊虹
定義一個指標,指標指向你要的陣列就行了
4樓:華哥
#include
void main();
int *p[3];
*p=&a[0][0];
for(int i=1;i<9;i++)
printf("%d ",*(*p+i));
printf("\n");}
5樓:驀然周接
首先要區別*p(3)與(*p)3,
6樓:黯梅幽聞花
指標變數可以指向一維陣列中的元素,也可以指向多維陣列中的元素。但在概念和使用上,多維陣列的指標比一維陣列的指標要複雜。
1、二維陣列的地址
二維陣列可以理解為一個廣義的一維陣列,一個以一維陣列為元素的一維陣列。例如定義一個陣列:
int a[3][4]=;
則陣列a對應的元素為:
a[0][0] a[0][1] a[0][2] a[0][3] …… 第0行
a[1][0] a[1][1] a[1][2] a[1][3] …… 第1行
a[2][0] a[2][1] a[2][2] a[2][3] …… 第2行
現在將第0行陣列元素a[0][0]、a[0][1]、a[0][2]、a[0][3]組成陣列a[0],第1行陣列元素a[1][0]、a[1][1]、a[1][2]、a[1][3]組成陣列a[1],第2行陣列元素組成陣列a[2],則a[0]、a[1]、a[2]就是一維陣列名,代表一個地址常量,分別指向每行的第0列元素,如圖 7 7和圖 7 8所示。那麼a[0]+1指向第0行的第1個元素,a[1]+1指向第1行的第1個元素,所以稱a[0]、a[1]、a[2]為列指標,對它們的增減1將移動1列元素。
圖 7 8 二維陣列中元素地址示意圖
對於二維陣列a來說,還可以把它看成是由a[0]、a[1]、a[2]這些「元素」組成的一維陣列,如圖 7 8所示。而a[0]、a[1]、a[2]又是由4個int型元素組成的陣列,所以a+0指向a[0]陣列的首地址(第0行元素的首地址),a+1指向a[1]陣列的首地址(第1行元素的首地址),那麼a+i指向第i行的首地址,所以a被看成是一個行指標,指標a的基型別是一個由4個int型資料構成的陣列。
由於a指向a[0],a+1指向a[1],所以*a等價於a[0],*(a+1)等價於a[1],*(a+i)等價於a[i],行指標*運算得到列指標。而a[0]+1指向第0行的第1個元素,a[1]+1指向第1行的第1個元素,那麼*(a[0]+1)等價於a[0][1],*(a[1]+1)等價於a[1][1],*(a[i]+j)等價於a[i][j],列指標*運算得到二維陣列的元素值。而a[i]又等價於*(a+i),所以*(a[i]+j)與*(*(a+i)+j)等價,都表示二維陣列元素a[i][j]。
對於二維陣列a[m][n]中的任意一個元素a[i][j],其地址可以表示為:
(1)&a[i][j],
(2)&a[0][0]+i*n+j,
(3)a[i]+j等價於*(a+i)+j
(4)a[0]+ i*n+j
對於二維陣列a[m][n]中的任意一個元素a[i][j],還可以表示成等形式。
【例7- 8】通過陣列元素的地址來引用二維陣列元素。
#include
#include
int main()
;cout<<"輸出二維陣列a:"<
int main()
;int (*p)[4]; //定義一個指向一維陣列(有4個整型元素)的指標變數
p=a;
cout<<"請給出輸出元素的下標值:"<>i;
cout<<"列標號:";
cin>>j;
cout<<"a["<
列標號:2
a[1][2]=7
a[10]={1,2,3,4,5,6,7,8,9,10}利用指標將陣列a中10個整數按相反順序存放
7樓:金色潛鳥
#include
int main();
int *p=a;
int i,t;
for (i=0;i<5;i++) ;
for (i=0;i<10;i++) printf("%d ",a[i]);
return 0;}
已知:int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},c語言問題
8樓:匿名使用者
int (*ptr)[3]=a這句,
bai將a的首地du址賦值給了ptr,ptr表示的是zhi指向一個含有三個int的數dao組的指標,*((ptr+1)[2])等價於*((ptr+1)+2),等回價於*(ptr+3),這表示從答
陣列a的首地址向後移動3個單位,每個單位為一個含有3個int的陣列,所以一共向後移動了9個單位,即得出執行結果10!
要想正確表達a[1][2],應該是(*(ptr+1))[2],陣列的運算子[ ]比間值運算子*的優先順序高,(*(ptr+1))[2]表示a向後移動一個單位即三個int,此時ptr指向4,再往後移動2個int指向6。
其實遇到這類問題畫記憶體結構圖比較容易理解了
9樓:匿名使用者
(*ptr)[3]=a,陣列
指標只有3行,陣列a有四行,所以(*ptr)[0]=,(*ptr)[1]=,(*ptr)[2]=,所以*((ptr+1)[2])表示的是(*ptr)[2]裡面的回
第二個元素就是答10
10樓:匿名使用者
*((ptr+1)[2])這種用法是不對的,陣列的下標相當與解引用,比如a[2]=*(a+2)
因此,上面的替換做法是(*(ptr+1))[2].
11樓:巫馬尓絲
*((ptr+1)[2])和copy*(*((ptr+1)+2))是等價的,而第二個算式可以演化成*(*(ptr+1+2)),也就是*(*(ptr+3))。
你既然會用指標表示陣列,那麼我用一維陣列給你舉個例子:
int arr[3];
這裡如果要表示陣列的第二個元素,有2種方式 arr[1], *(arr+1),
就是說arr[1] == *(arr+1)
那麼你*((ptr+1)[2])我們只看括號內的內容(ptr+1)[2] ,它按照上邊的等式轉化一下就是*((ptr+1)+2),去掉裡面的括號*(ptr+1+2),也就是*(ptr+3);
*((ptr+1)[2]) == *(*(ptr+3)) == a[3][0]
很好的解釋了為什麼你寫的第一個表示式是10了,
你如果要用ptr表示a[1][2]就應該是*(*(ptr+1)+2)或者*(ptr+1)[2]這樣寫才對。
已有定義「int a[11]={1,2,3,4,5,6,7,8,9,10};」,要求通過指標完成在一組a中下標為
12樓:匿名使用者
#include
void insert(int *p,int i)*(p+j)=100;
for(j=0;j<11;j++)
printf("\n");
}int main()
;int i;//要在第i個下標插入100scanf("%d",&i);
insert(a,i);
return 0;}
13樓:匿名使用者
if(j>=0 && j <=10)
*(arr+j) = 100;
}寫的不太好,湊合能用吧。。。
14樓:匿名使用者
int *p = a;
for(int i = 10;i>j;i--)*(p+i) = *(p+i-1);
*(p+i) = 100;
c語言指標問題。。 若有int a[]={0,1,2,3,4,5,6,7,8,9,0},*p=a,
15樓:匿名使用者
a: a[p-a] = a[0],即bai陣列a的第一個元素。du這裡的a沒有定義,估計應該本來是zhia吧,輸入題目的dao
時候不專小心句首自動大寫了
b: a[i]是數屬組a的第i個元素,&a[i]是該元素的地址,所以*(&a[i])是該元素的值。該項等價於a[i]
c: p[i] = a[i],即陣列a的第i個元素值d: 這個是錯誤的。*(a+i)是陣列a的第i個元素值,*(*(a+i))語法錯誤
c語言中怎麼將一組16進位制數加入陣列
例 include include char sdec 4 把 0x05,0xc5,0xb3,0xea 組合成一個十六進位制數 0x05c5b3ea 並且把 0x05c5b3ea 轉換成十進位制數。unsigned int i,v int main v 0 for i 0 i i 8 printf ...
用matlab或spss將一組資料怎麼擬合成多元多項式
程式 clear clc x1 2187.45 2482.49 2969.52 3585.72 4282.14 4950.91 5813.56 6801.57 7806.53 8201.23 9510.91 x2 701.24 724.57 746.62 778.27 800.80 827.75 8...
按鍵精靈怎麼把一組數字比如72593按從小到大或者從大到小的順序排列
先分拆成單個的數字,然後排序, 還是我給原始碼吧,說了也不懂。str 6498512367 next m split text,for i 0 to ubound m 1for j 0 to ubound m 1if int m i int m j then 這句的大於號改為小於號即可從小到大排列 ...