C语言中怎么把一维数组赋给另外一个一维数组

那天我在咖啡馆,看着邻座小哥调试代码,屏幕上跳着各种数组赋值的提示。
他挠挠头,嘴里嘟囔着“memcpy好像更快,但条件太苛刻了”。
等等,这让我想起大学时候的一个实验。

我们用C语言写图像处理程序,需要把一维像素数组拷贝到二维图像数组。
刚开始用循环,每个像素一个个赋值,屏幕上显示的灰度图总是卡顿。
老师指导我们用memcpy,一行代码搞定:memcpy(image[0], pixels, sizeof(unsigned char) width height);。
当时是2 01 8 年,实验室的MacBook Pro运行速度确实快了三倍,但前提是所有内存必须连续。

不过,有一次遇到动态内存分配,二维数组某一行没连续,memcpy就崩了。
我们只好退回循环,分块拷贝。
这让我想起扩展资料里说的“左值右值”规则,当时写结构体指针赋值时,差点写成(student1 .num) = 1 0002 ;,结果编译器直接炸了。

现在想想,为啥C语言设计得这么“倔”?大概是底层追求极致效率吧。
但程序员总得在灵活和高效之间找平衡。
比如这次重构项目,我用智能指针封装了内存管理,虽然牺牲了点性能,但代码简洁多了。
屏幕右下角CPU占用率还是显示在3 0%,但至少不会出现2 01 8 年那种卡成PPT的情况了。

突然想到,Java的ArrayList转二维数组时,根本不用关心内存连续性。
这算不算另一种权衡?或者,未来硬件会不会自动优化这种操作?

在VBA中如何用一个数组给另一个数组赋值?

结论:Excel VBA能分配数组到单元格。

步骤1 :选定目标单元格。
比如B2
步骤2 :插入表单控件按钮。
点击插入-表单控件-按钮。

步骤3 :生成按钮,改名字叫"分配数组"。
比如叫"RunArray"。

步骤4 :点击开发工具-查看代码。

步骤5 :输入定义语句。
比如Dim arr(1 to 5 ) As Integer。
定义个5 个整数的数组。

步骤6 :输入赋值语句。
比如Range("B2 :B6 ").Value = arr。
把数组填到B2 到B6
步骤7 :运行按钮。
点击"RunArray"按钮,B2 :B6 显示数组。

我也还在验证这个方法对最新Excel版本是否完全兼容。
你自己掂量。

C++一维数组怎样给二维数组赋值,如int a[]={1,2}给int b[3][2]赋值(不用循环,实际数组很大),谢谢。

那天我帮朋友调试代码,他写了个小程序处理传感器数据。
一维数组存温度,二维数组存时间和温度。
时间是一天2 4 小时,温度是每小时的读数。
他直接把一维数组塞进二维数组,结果发现只有前两个小时有数据,后面都是空的。
他挠挠头,说本来想显得自己代码高级,不用循环。
我看了看,确实可以不用循环,但得知道怎么对应。
比如第一个小时用温度数组的第一个值,第二个小时用第二个值,以此类推。
他试了试,发现写出来还挺长的,不如用循环简洁。
不过他突然说,如果时间不是2 4 小时,而是只有1 2 小时呢?那不就得改写赋值语句吗?等等,如果温度数据是实时来的,时间也是动态变化的呢?那循环里还得加判断条件。
唉,有时候直接赋值能省事,有时候又得费劲调试。