console.log("懒狗一只🍺");|

T3rra

园龄:5年粉丝:1关注:12

【笔记】二维数组在内存地址中的存储

最近在学习STM32的ADC和DMA多通道采集过程中有使用到二维数组,姑且记录一下以作备忘。
参考:http://c.biancheng.net/view/2022.html


举个例子就能很简单的说明了
创建一个M行N列的int数组,数组定义如下(例:M=3 N=5)

#define M 3 
#define N 5
int arr[M][N];

给数组按顺序赋值

int (*p)[N] = arr;
for(int i=0; i<M*N; i++)
{
  *(*p+i) = i+1;  //按照数组在内存地址中的存储顺序依次赋值1~15
}

再将其按M行N列的格式打印出来

for(int i=0; i<M; i++)
{
  for(int j=0; j<N; j++)
  {
    printf("%4d ", arr[i][j]);
    if(j==N-1) printf("\n");
  }
}

结果为

   1    2    3    4    5 
   6    7    8    9   10 
  11   12   13   14   15 

小结

抽象得看二维数组是一个矩阵,按照从左至右,从上到下的顺序存储数值,实际上在内存中是连续一片的
反过来说,将连续一片的内存数据读取为二维数组,如果要按照通常的理解方式来,就应当一行一行的读。再具体一点:要读取M组N个数据,第一次读的N个数据作为二维数组的第一行、第二次读N个数据作为数组的第二行,以此类推最终得到一个M行N列的数组。

本文作者:T3rra

本文链接:https://www.cnblogs.com/T3rra/p/17689047.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   T3rra  阅读(182)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起