首页 > 编程语言 > 详细

多维数组

时间:2020-04-13 16:51:08      阅读:60      评论:0      收藏:0      [点我收藏+]
基本常识
1.存储顺序:行序为主,多维数组的存储是连续的,二维数组A[m][n]可以看作是m个向量,向量的维度是n维。存储时先存储一个向量,再接着连续存储余下的。
2. 多维数组的访问,A是一个二维数组的第一个子数组名,在初始化一个二维数组时,编译器分配好空间的同时,还把第一个数组的地址赋给数组名A,它是常量不可改变。
    A[m][n],其实是间接访问表达式*(*(A+m)+n),(A+m)是指向数组的指针,
    *(A+m)变为整型指针,还有很多不同的形式,实在太吓人了,这里就不说了
3.指向数组指针:声明 int (*p)[5]是一个指向数组大小为5的数组指针,下标引用符优先级高,但是有括号,因此先考虑(*p),所以p是一个指针,可以这样理解。
int (*p)[5]=A,p++就是在矩阵的每一行移动。如果需要在矩阵的每一个整型元素移动,int *p2=&A[0][0],p++ 
4.多维数组作为函数参数,func(int (*p)[5]),不可以像一维数组那样用int **p,这是指向整型指针的指针,与指向整型数组的指针不一样。


//用整型指针遍历二维数组
int main()
{
int matrix[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
int *mp;
mp=&matrix[0][0];
for(int i=1;i<=16;i++){
    printf("%d ",*mp++);
}
}

//指向多维数组的指针
int main()
{
    int matrix[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
    int (*mp)[4];
    mp=matrix;
    for(int i=1;i<=4;i++)
        printf("%d ",mp++);
//6356664 6356680 6356696 6356712
}

多维数组

原文:https://www.cnblogs.com/lzycodinglife/p/12692312.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!