二維數組與數組指針以及指針數組
二維數組定義
int buff[3][5];
第一個[3] 表示二維數組buff中有3個一位數組
第二個[5] 表示每個一維數組中有5個成員。
若二維數組定義時進行初始化則第一個[]可以不填。第二個[]不能省略。
buff表示第0行的整體地址。即:&buff[0], buff類型為:int (*)[5]
buff[0]表示第0行的首地址。即:&buff[0][0], buff[0]類型為int *
buff[0][0]表示第0行第0列的值。
示例:
int buff[][3]={1,2,3,4,5,6};//每行有3個元素
int buff2[][3]={
{1,2,3},
{4,5,6},
};
//部分初始化,數組中未賦值的默認為0
int buff3[][3]={
{1,2,3,},
{},
{4,5,6},
};
//初始化自動計算行數,數組中未賦值的默認為0
int buff3[][3]={
{},
{},
{},
};
int buff[3][3];//定義二維數組直接限制行、列,未初始化成員為隨機值
注:此處舉例均為局部二維數組
二維數組遍歷
- 示例一:
int main()
{
int buff[][3]={1,2,3,4,5,6};//每行有3個元素
int i,j;
for(i=0;i(buff)>
-
示例二
#include
int main()
{
int buff[][3]={1,2,3,4,5,6};//每行有3個元素
int *p=buff[0];
int i;
for(i=0;i(buff)>
二維數組作為形參處傳入
-
以數組方式傳入
#include
void tow_array(int buff[][3],int line);
int main()
{
int buff[][3]={1,2,3,4,5,6};//每行有3個元素
tow_array(buff,sizeof(buff)/sizeof(buff[0]));
}
/************遍歷二維數組*****************
**
**以數組方式傳入,必須指定列寬
**int line -- 二維數組行數
****************************************/
void tow_array(int buff[][3],int line)
{
int i,j;
for(i=0;i;i++)>
-
以數組指針傳入
#include
void tow_array(int (*buff)[3],int line);
int main()
{
int buff[][3]={1,2,3,4,5,6};//每行有3個元素
tow_array(buff,sizeof(buff)/sizeof(buff[0]));
}
/************遍歷二維數組*****************
**
**以數組指針方式傳入,必須指定列寬
**int line -- 二維數組行數
****************************************/
void tow_array(int (*buff)[3],int line)
{
int i,j;
for(i=0;i;i++)>
數組指針
定義:int (p)[n];指向數組整體的指針。數組指針類型:int ()[n]
()優先級高,所以(*p)是一個指針,指向一個整型的一維數組,一維數組的成員個數位n,也就是說p的步長為n。即p+1偏移的地址為n個int型長度。因此數組指針也稱為行指針。
優先級: () > [] > *
示例:
#include
int main()
{
int buff[][3]={1,10,3,4,5,6};//每行有3個元素
int (*p)[3]=buff;
printf("*p[0]=%d\n",*p[0]);//等價于buff[0][0]
printf("*(p[0]+1)=%d\n",*(p[0]+1));//等價于buff[0][1]
printf("*p[1]=%d\n",*p[1]);//等價于buff[1][0]
}
指針數組
定義:int* p[n];數組中保存int*指針。指針數組類型:int *[n],p的類型是int **,p+1偏移的地址為:sizeof(int )。
[]的優先級高,[]和p組合成一個數組,int 和p[]組合成指針數組,他有n個指針類型的數組元素,即數組中的每一個元素都是int型指針。
優先級: () > [] > *
將二維數組賦個指針數組示例:
#include
void tow_array(int (*buff)[3],int line);
int main()
{
int buff[][3]={1,10,3,4,5,6};//每行有3個元素
int *p[3];
*p=buff[0];
p[0]=buff[0];
p[1]=buff[1];
p[2]=buff[2];
printf("%d\n",(*p)[0]);//等價于:p[0][0]
printf("%d\n",(*p)[1]);//等價于p[0][1]
printf("%d\n",*(p[0]+1));//等價于p[0][1]
printf("%d\n",*(p+1)[0]);//等價于p[1][0],*(p+1)保存buf[1][0]地址
printf("%d\n",*(*(p+1)+1));//等價于p[1][1]
}
注:二維數組賦值給指針數組時p=buff是錯誤的。
二維數組通過二維指針方式傳入
示例一:
#include
void tow_array(char **buff,int line);
int main()
{
int i;
char *buff[]={"123",
"123456",
"123456789",
"字符串口測試"
};
tow_array(buff,sizeof(buff)/sizeof(buff[0]));
}
/************遍歷二維數組*****************
**
**以二維指針傳入
**int line -- 二維數組行數
****************************************/
void tow_array(char **buff,int line)
{
int i,j;
for(i=0;i;i++)>
示例二:
#include
void tow_array(int **buff,int line,int row);
int main()
{
int i;
int buff[][3]={1,10,3,4,5,6};//每行有3個元素
int *p[3];
//將二維數組賦值給指針數組
for(i=0;i(buff)>
審核編輯:湯梓紅
-
指針
+關注
關注
1文章
484瀏覽量
70902 -
數組指針
+關注
關注
0文章
5瀏覽量
5282
發布評論請先 登錄
相關推薦
評論