c語言二維指針數組
『壹』 c語言如何定義指針指向字元型二維數組
使用指針變數訪問二維數組的任意一個元素的方法:
1.使用列指針:定義一個列指針p,讓它指向二維數組的第0個元素
int a[3][4];
int *p;
p=&a[0][0];
//因為a[0]是第0行的數組名,所以p=&a[0][0]相當於p=a[0],因為a[i][j]前面共有i*4+j個元素
該二維數組的任意i行j列元素可表示為*(p+i*4+j)。
2.使用行指針:定義一個行指針p,讓它指向二維數組的第0行
int a[3][4];
int (*p)[4];
p=a; //也可以為p=&a[0];
其中* ( *(p+i)+j)表示任意一個i行j列的元素。
(1)c語言二維指針數組擴展閱讀:
數組的使用規則:
1.可以只給部分元素賦初值。當{ }中值的個數少於元素個數時,只給前面部分元素賦值。例如:static int a[10]={0,1,2,3,4};表示只給a[0]~a[4]5個元素賦值,而後5個元素自動賦0值。
2.只能給元素逐個賦值,不能給數組整體賦值。例如給十個元素全部賦1值,只能寫為:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能寫為:static int a[10]=1;請注意:在C、C#語言中是這樣,但並非在所有涉及數組的地方都這樣,資料庫是從1開始。
3.如不給可初始化的數組賦初值,則全部元素均為0值。
4.如給全部元素賦值,則在數組說明中, 可以不給出數組元素的個數。例如:static int a[5]={1,2,3,4,5};可寫為:static int a[]={1,2,3,4,5};動態賦值可以在程序執行過程中,對數組作動態賦值。這時可用循環語句配合scanf函數逐個對數組元素賦值。
網路-數組
『貳』 C語言二維數組指針
樓主你好:
二維數組的指針不難理解。
請參看我的帖子:
http://..com/question/128766724.html
是關於指針的 很通俗易懂 的解釋!
有不明白的,QQ我就可以了。
QQ:270495267
倒數第四行*(*(a+2)+2)就等價於你寫的*(*board+i))
其實就是*board[i]。
*board 就相當於 board[0][0] 的 地址 ,也就是&board[0][0]
『叄』 C語言指向二維數組的指針
一、你的 float score 數組定義的是:一個3行、4列的二維浮點數組,數組的元素為浮點數。如果你換個格式書寫就清晰了!
float score[3][4]={{65,67,70,60,},{80,87,90,81,},{90,99,100,98}};
在調用的過程中,score 就是這個數組的首地址,指向的是浮點數組{65,67,70,60,}。score + 1 指向的是數組{80,87,90,81,}。
二、你的 float *p 定義的是:一個指向浮點數的指針。這個是一維的。
在調用的過程中,float 指向的是 xx。一個浮點數字。
兩個的定義不同,所以參數傳遞過程中會出錯。
三、你的 float (*p)[4] 定義的是:一個指向含有四個元素的浮點數組的指針。
在調用的過程中,float 指向的是{xxx,xx,xx,xx,},由四個浮點數組成的數組。
這時兩個定義相同,所以參數傳遞過程中沒有錯誤。
四、有個建議,你的程序書寫格式不清晰,不利於你糾錯和修改,應該盡量的清晰、明確,不建議使用簡化方式定義參數。
作為一個軟體工作者,應該盡量使程序流暢、格式清晰、易讀,這是一個軟體工作者最基本的職業素養。
格式化後,程序如下,會清晰很多:
#include<stdio.h>
void main()
{
void search (float (*p)[4],int n);/*這里的 float *p 好像有問題*/
float score[3][4]={{65,67,70,60,},{80,87,90,81,},{90,99,100,98}};
search(score,2);
}
void search(float (*p)[4],int n)/*這里的 float *p 好像有問題*/
{
int i;
printf("the score of No.%d are:\n",n);
for(i=0;i<4;i++)
{
printf("%5.2f",*(*(p+n)+i));
}
printf("\n");
}
『肆』 C語言指針與二維數組
a是二維數組名,其字面值是該數組的起始地址,該地址同時也是一維數組a[0]的起始地址
所以a,*a,a[0],&a[0]的字面值都相同,a[0][0]就是首個元素
剩下的幾行輸出同理,無非就是行指針偏移的+1是以第二維的大小移動的而已
『伍』 c語言中二維數組的指針如何表示
比如定義一個int型的二維數組,如下:
int **p;
或者
int p[MAX_ROW][MAX_LINE];
不同的是前者定義了一個int型二維數組的指針,編寫器知道該指針的移動方式以int為單位,但此時該指針為NULL,即沒有與內存中的物理單元進行對應。使用指針前需要用malloc()為該指針分配一段內存空間,內存空間的大小在malloc()的參數中指定,系統會為該指針分配一段空閑內存供該指針使用。或者將你的程序中其他int類型的指針賦值給該指針使其映射到內存物理單元。在程序結束或不在需要使用該指針時需要使用free()將該指針所映射內存釋放。
後者在定義時為該指針分配了MAX_ROW*MAX_LINE個int大小的空間映射到內存,之後就可以直接使用了。
『陸』 c語言裡面怎麼用指針表示二維字元數組
二維數組就是數組的數組,二維數組即數組的元素是一維數組的數組。那麼我們要用指針指向二維數組,就是要定義一個指向數組的指針了。例如:
charstr[3][10];//定義了一個char型的二維數組
char(*pstr)[10];//定義了一個指向char型的數組指針
pstr=str;//指針指向二維數組str
下面用pstr這個指針對二維數組進行賦值操作
inti;
for(i=0;i<3;i++)
scanf("%s",*(p+i));//*(p+i)等價於str[i]
『柒』 C語言二維數組指針變數是什麼int (*p)[2]什麼意思
c語言比較靈活,C語言的指針更加靈活多變,int (*p)[2]是一個整型的指針型一維數組,表示兩個元素,具體如下,
數組指針變數形式如下:
類型名 (*數組名)[數組行數][數組列數]
int (*p)[2]表示定義一個數組指針,指針指向的地址就需要後續程序給出,不然會變為野指針。
『捌』 C語言二維數組指針變數是什麼,int (*p)[2]什麼意思
二維數組指針變數形式如下:
類型名
(*數組名)[數組行數][數組列數]
如:int
(*p)[2][3];
//
定義一個int類型的二維數組指針變數,數組中每個元素都是一個指針
int
(*p)[2]表示定義一個數組指針,只是是一個一維的數組指針,數組中每個元素(共2個元素)都是一個int類型的指針變數,指針指向的地址就需要後續程序給出,不然會變為野指針。
『玖』 C語言 如何定義一個二維指針數組
定義二維指針數組與定義一維指針數組差不多,只是矩陣的維度增加了一維而已。
下面通過具體的實例來說明如何定義一個二維數組
int*p[2][3];//定義一個二維數組,只是定義,並沒有分配地址空間
inti,j;//數組的行數和列數
//下面的2個for循環是用來對二維指針數組進行初始化的,也即分配地址。如果不進行初始化操作,就會使指針變為野指針(即指向不明)。
for(i=0;i<2;i++)
for(j=0;j<3;j++)
p[i][j]=(int*)malloc(sizeof(int));
*p[0][1]=2;//對指針數組中指針所指向的內存單元進行賦值操作
printf("%d ",*p[0][1]);//輸出結果
『拾』 C語言關於二維數組指針表示方法
雖然說「首地址
=
array[0]=&array[0][0]」,這只代表他們的值相同,意義不同的。
array是二維指針變數,array[0]是一維指針變數,&array[0][0]是變數的地址。
*array
表示二維指針前加*
等於一維指針array[0],值還是以前的值,但是意義不同。