二维数组与数组指针以及指针数组

网友投稿 866 2022-12-12

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

二维数组与数组指针以及指针数组

二维数组与数组指针以及指针数组

二维数组定义 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},}; //部分初始化,数组中未赋值的默认为0int buff3[][3]={ {1,2,3,}, {}, {4,5,6},}; //初始化自动计算行数,数组中未赋值的默认为0int 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)>

上一篇:WAYON维安功率半导体新战场,浅谈逆变器现状
下一篇:双通道或四通道运放封装,究竟有多匹配?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~