当前位置: 代码迷 >> VC/MFC >> 二维数组可以单维引述
  详细解决方案

二维数组可以单维引述

热度:110   发布时间:2016-05-02 03:23:19.0
二维数组可以单维引用?
买了一个pci采集卡。看厂家给的例子里。
头文件里
protected:
long ADdata[60000];
char Buff1[32][1000];//采样值
char Buff2[32][1000];//电压值

cpp里
       ADdata[i]=AC6613_AD(hDevice,i,2);
       sprintf(Buff2[i], "%d", ADdata[i]);//转换各通道采样数值
       sprintf(Buff1[i], "%5.3fV", (ADdata[i]-2048.0) *5.0 / 2048.0);//各通道采样数值转换为电压值

不要管函数功能。buff1 buff2 定义为二维数组,在sprintf里变成了一维数组?而且编译能通过。

       没看明白呢。
------解决思路----------------------
Buff1、Buff2都是二维数组名,也代表数组起始地址,但是行指向;
Buff1[i]则是列指向,是第i+1行一维数组起始地址;
Buff1[i]等价于*(Buff1+i)
------解决思路----------------------
一个数组内存都是连续的,1维数组可以可以认为下标和存储单元一一对应。2维数组是从另一个视角来看待一维数组,逻辑上是2二维或者多维,实际还是连续的内存单元,因为你仍然可以使用1维的逻辑进行访问。更深入的,数组实际是这个指针,一维、二维或者多维都是以规定的算法计算偏移量,指针+偏移量就是你要访问的单元
------解决思路----------------------
一个数组内存都是连续的,1维数组下标和存储单元一一对应;2维数组是从另一个视角来看待一维数组,逻辑上是2二维或者多维,实际还是连续的内存单元,因此你仍然可以使用1维的逻辑进行访问。

更深入的,数组实际是一个指针,一维、二维或者多维的下标都是以规定的算法计算偏移量,指针+偏移量就是你要访问的单元
------解决思路----------------------
二维数组并不是真正意义上的二维数组,而只是一维数组里的一维数组
只调用一维,得到的则是一维数组里的其中一个一维数组,而数组名则可以当作指向该数组首元素的指针
  相关解决方案