- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
移动 2D double 组时遇到问题。在下面的代码中,我有
双权重[wt][2]
我可以将 Weights[0][0] 移动到 Weights[0][1],但只能在要移动的字节数末尾添加“*2”。为什么当我使用“wt * sizeof(double)”时它只移动大约一半的数组。
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <time.h>
#define wt 169
int main(void)
{
double Weights[wt][2] ;
double randnum = 0 ;
int randint = 0 ;
int i = 0 ;
srand(time(NULL)) ;
randnum = (double) rand() ;
randint = (int)randnum ;
for (i=0; i<wt; i++) // Initialize weights
{
while (randnum > 1)
randnum /= 10 ;
Weights[i][0] = randnum ;
randnum = (double)rand() ;
}
for (i=0; i<wt; i++)
printf("%lf, ", Weights[i][0]) ;
printf("\n\n") ;
memmove(&Weights[0][1], &Weights[0][0], wt * sizeof(double)*2) ;
for (i=0; i<wt; i++)
printf("%lf, ", Weights[i][1]) ;
printf("\n\n") ;
return 0 ;
}
输出“wt * sizeof(double)*2”移动所有数字
0.195398, 0.127509, 0.124090, 0.541791, 0.165211, 0.966964, 0.937778, 0.147996, 0.145539, 0.174831, 0.492294, 0.182906, 0.317039, 0.194350, 0.674522, 0.162258, 0.133443, 0.546239, 0.397388, 0.159630, 0.343595, 0.110326, 0.186186, 0.133299, 0.150245, 0.904083, 0.166712, 0.567598, 0.147243, 0.243560, 0.202927, 0.127892, 0.151865, 0.587645, 0.182071, 0.102328, 0.972841, 0.611008, 0.355752, 0.280744, 0.211837, 0.848045, 0.210981, 0.528876, 0.644063, 0.636847, 0.397108, 0.197850, 0.691471, 0.401359, 0.142732, 0.103507, 0.150461, 0.114170, 0.220569, 0.859577, 0.204578, 0.188769, 0.142717, 0.137072, 0.213124, 0.130896, 0.502159, 0.150241, 0.131484, 0.175389, 0.378205, 0.140194, 0.786397, 0.733956, 0.420938, 0.998233, 0.158200, 0.383263, 0.152711, 0.785811, 0.102011, 0.153108, 0.205708, 0.171158, 0.193244, 0.133691, 0.599164, 0.128957, 0.331123, 0.819733, 0.166431, 0.229418, 0.559934, 0.142884, 0.160014, 0.543696, 0.590316, 0.210230, 0.204611, 0.190515, 0.130202, 0.276829, 0.204535, 0.916599, 0.101079, 0.318801, 0.191483, 0.445303, 0.702064, 0.129446, 0.523884, 0.172217, 0.678055, 0.433479, 0.128627, 0.463012, 0.177039, 0.188544, 0.175258, 0.210151, 0.557686, 0.175425, 0.183448, 0.111762, 0.103560, 0.178359, 0.166132, 0.162592, 0.173840, 0.155994, 0.138359, 0.186860, 0.183677, 0.128145, 0.637718, 0.700070, 0.160025, 0.405066, 0.114537, 0.154831, 0.169952, 0.166926, 0.187701, 0.230096, 0.210274, 0.101579, 0.693108, 0.172564, 0.753747, 0.298207, 0.167967, 0.131143, 0.205245, 0.186312, 0.281571, 0.940572, 0.149922, 0.194289, 0.419006, 0.109014, 0.135534, 0.180259, 0.811259, 0.104463, 0.936559, 0.144898, 0.174470, 0.389326, 0.185404, 0.742589, 0.544157, 0.140608, 0.264363,
0.195398, 0.127509, 0.124090, 0.541791, 0.165211, 0.966964, 0.937778, 0.147996, 0.145539, 0.174831, 0.492294, 0.182906, 0.317039, 0.194350, 0.674522, 0.162258, 0.133443, 0.546239, 0.397388, 0.159630, 0.343595, 0.110326, 0.186186, 0.133299, 0.150245, 0.904083, 0.166712, 0.567598, 0.147243, 0.243560, 0.202927, 0.127892, 0.151865, 0.587645, 0.182071, 0.102328, 0.972841, 0.611008, 0.355752, 0.280744, 0.211837, 0.848045, 0.210981, 0.528876, 0.644063, 0.636847, 0.397108, 0.197850, 0.691471, 0.401359, 0.142732, 0.103507, 0.150461, 0.114170, 0.220569, 0.859577, 0.204578, 0.188769, 0.142717, 0.137072, 0.213124, 0.130896, 0.502159, 0.150241, 0.131484, 0.175389, 0.378205, 0.140194, 0.786397, 0.733956, 0.420938, 0.998233, 0.158200, 0.383263, 0.152711, 0.785811, 0.102011, 0.153108, 0.205708, 0.171158, 0.193244, 0.133691, 0.599164, 0.128957, 0.331123, 0.819733, 0.166431, 0.229418, 0.559934, 0.142884, 0.160014, 0.543696, 0.590316, 0.210230, 0.204611, 0.190515, 0.130202, 0.276829, 0.204535, 0.916599, 0.101079, 0.318801, 0.191483, 0.445303, 0.702064, 0.129446, 0.523884, 0.172217, 0.678055, 0.433479, 0.128627, 0.463012, 0.177039, 0.188544, 0.175258, 0.210151, 0.557686, 0.175425, 0.183448, 0.111762, 0.103560, 0.178359, 0.166132, 0.162592, 0.173840, 0.155994, 0.138359, 0.186860, 0.183677, 0.128145, 0.637718, 0.700070, 0.160025, 0.405066, 0.114537, 0.154831, 0.169952, 0.166926, 0.187701, 0.230096, 0.210274, 0.101579, 0.693108, 0.172564, 0.753747, 0.298207, 0.167967, 0.131143, 0.205245, 0.186312, 0.281571, 0.940572, 0.149922, 0.194289, 0.419006, 0.109014, 0.135534, 0.180259, 0.811259, 0.104463, 0.936559, 0.144898, 0.174470, 0.389326, 0.185404, 0.742589, 0.544157, 0.140608, 0.264363,
带有“wt * sizeof(double)”的输出仅移动数字的前半部分
0.153249, 0.333985, 0.315349, 0.134140, 0.101261, 0.191920, 0.135506, 0.126694, 0.320255, 0.179945, 0.723870, 0.450292, 0.147805, 0.166899, 0.140249, 0.194037, 0.143623, 0.395438, 0.161701, 0.212640, 0.147223, 0.579871, 0.115994, 0.192346, 0.165274, 0.162130, 0.142833, 0.491645, 0.187743, 0.500989, 0.142792, 0.126244, 0.834974, 0.174327, 0.456355, 0.184758, 0.151499, 0.181142, 0.967037, 0.183524, 0.146338, 0.169091, 0.138052, 0.793942, 0.121242, 0.154054, 0.586830, 0.501165, 0.193598, 0.563521, 0.713805, 0.126073, 0.114339, 0.187375, 0.103670, 0.176708, 0.134757, 0.317550, 0.111237, 0.107752, 0.818539, 0.153916, 0.192476, 0.165351, 0.113494, 0.648831, 0.135361, 0.502446, 0.312766, 0.173164, 0.190206, 0.177615, 0.186407, 0.328257, 0.422603, 0.929002, 0.186880, 0.100943, 0.143017, 0.165729, 0.106579, 0.214397, 0.770535, 0.118013, 0.187023, 0.180724, 0.799717, 0.107032, 0.212479, 0.910953, 0.348812, 0.795843, 0.302626, 0.192825, 0.301873, 0.143757, 0.841656, 0.165548, 0.194001, 0.115442, 0.182865, 0.213022, 0.783083, 0.154524, 0.310994, 0.120569, 0.326754, 0.323083, 0.676368, 0.175692, 0.168960, 0.113342, 0.175341, 0.312651, 0.166064, 0.147616, 0.211989, 0.965781, 0.398994, 0.209719, 0.187673, 0.399342, 0.745553, 0.318769, 0.592167, 0.104743, 0.146945, 0.143382, 0.555426, 0.126198, 0.440760, 0.236591, 0.124471, 0.122384, 0.178183, 0.155571, 0.282046, 0.210858, 0.158802, 0.349683, 0.171802, 0.113013, 0.148311, 0.132394, 0.144278, 0.164917, 0.652620, 0.141519, 0.467467, 0.105161, 0.136490, 0.196718, 0.145096, 0.211045, 0.228595, 0.204312, 0.101039, 0.169804, 0.132946, 0.156582, 0.812532, 0.177022, 0.180241, 0.205725, 0.846581, 0.143675, 0.146547, 0.112863, 0.139785,
0.153249, 0.333985, 0.315349, 0.134140, 0.101261, 0.191920, 0.135506, 0.126694, 0.320255, 0.179945, 0.723870, 0.450292, 0.147805, 0.166899, 0.140249, 0.194037, 0.143623, 0.395438, 0.161701, 0.212640, 0.147223, 0.579871, 0.115994, 0.192346, 0.165274, 0.162130, 0.142833, 0.491645, 0.187743, 0.500989, 0.142792, 0.126244, 0.834974, 0.174327, 0.456355, 0.184758, 0.151499, 0.181142, 0.967037, 0.183524, 0.146338, 0.169091, 0.138052, 0.793942, 0.121242, 0.154054, 0.586830, 0.501165, 0.193598, 0.563521, 0.713805, 0.126073, 0.114339, 0.187375, 0.103670, 0.176708, 0.134757, 0.317550, 0.111237, 0.107752, 0.818539, 0.153916, 0.192476, 0.165351, 0.113494, 0.648831, 0.135361, 0.502446, 0.312766, 0.173164, 0.190206, 0.177615, 0.186407, 0.328257, 0.422603, 0.929002, 0.186880, 0.100943, 0.143017, 0.165729, 0.106579, 0.214397, 0.770535, 0.118013, 0.187023, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
为什么它可以使用“*2”,而大小应该是 169 * 8 = 1352 字节,而不是 2704 字节
最佳答案
按照您声明权重
的方式,元素按以下顺序出现在内存中:
Weights[0][0], Weights[0][1], Weights[1][0], Weights[1][1], Weights[2][0], ...
您似乎期望它们按以下顺序排列:
Weights[0][0], Weights[1][0], Weights[2][0], ..., Weights[168][0], Weights[168][1], Weights[0][1], Weights[1][1], ...
你的memmove()
正在将一半的已初始化元素复制到其之前的未初始化元素中。它还将一半未初始化的元素复制到其之前的已初始化元素,从而丢弃该值。
如果您希望一组的所有 169 个权重在内存中彼此连续,则需要反转 Weights
的声明和使用中下标的顺序。 (例如double Weights[2][wt];
)
关于c - memmove 只移动一半的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49593876/
下面的代码片段显示了 memmove() 的实现。 void my_memmove(void* dest, const void* src, size_t size) { unsigned i
在 CLRS 第 2 章中有一个练习,询问是否可以将插入排序的最坏情况运行时间改进为 O(n lg n)。我看到了this question发现做不到。 最坏情况下的复杂性无法改善,但与单独移动数组元
我正在使用memmove(),但目标似乎正在覆盖源,或者也许我不明白覆盖是什么。我有一个 char 数组(目标),然后是一个指向目标的指针,该指针位于 vector 内部。 char destinat
根据 C11 N1570 standard draft : 7.24.2.2 “memmove 函数”: The memmove function copies n characters from t
移动 2D double 组时遇到问题。在下面的代码中,我有 双权重[wt][2] 我可以将 Weights[0][0] 移动到 Weights[0][1],但只能在要移动的字节数末尾添加“*2”。为
我正在尝试读取和处理二进制文件。由于其编写方式,我以字符数组的形式读取它。当我处理完数据后。我将剩余数据移至字符缓冲区的开头以避免缓冲区溢出。我正在为此使用 memmove,但这似乎会导致堆增长,这表
假设有一个指向浮点值数组的指针:float *source; 并且我们知道它的大小为 int sourcesize; 有一个已经实现的函数,它从 inputVec 添加一个元素到 souce 数组:
我正在使用 memmove 将 std::string 元素向右移动一位。目的地的第一个地点是唯一一个乱七八糟、堆满垃圾的地方。我使用 memmove 而不是 strcpy 因为我在需要模板的类中使用
假设我有一个这样的整数数组 #define MAX 5 int bar [MAX] = {0}; int foo [MAX] = {3,1,0,0,0}; 现在我想移动这个数组,使所有空条目都在左边,
我想使用返回结果字符串的函数连接两个字符串。它会是这样的: char *String_Concat (char *String_1, char *String_2) { char *Strin
memmove 并没有真正移动内存,不是吗?它只是将内存从一个区域复制到另一个区域,并允许这两个区域重叠。我问这个问题是因为我只是想知道为什么这个 fnc 以非常误导的方式被调用。 因为我知道当某物从
我正在阅读关于 memcpy 和 memmove 的 c++ 引用资料,它们似乎在做同样的事情,除了 memmove 有一个特定的think called(允许目的地和来源重叠)。 什么是重叠以及何时
标准库提供了std::copy,可以看作是C的memcpy()的泛化/类化。它还保持了 memcpy() 的要求,范围 [first, last) 与范围 [d_first , d_first + s
我编写了以下函数,将给定的完整路径拆分为目录、文件名和扩展名。 #include #include #include struct path_info { char *directory
我在 StackOverflow 上进行了搜索,但找不到我想要做的事情。我想将指针 Items 复制到指针 COPYTO。然后就可以调用COPYTO->x。 #include typedef str
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Bus error troubleshooting 要从字符串中删除重复项,这是我编写的程序: #include #
当我编写时,我的代码不会崩溃: char s[44] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; memmove(s, "asdf", 5); 但
我正在尝试移动可能重叠的内存,对 *src 和 *dst 使用负增量或正增量,并且不使用大型临时缓冲区。 我正在尝试为 memmove() 函数找到一个有效的替代方案,大致如下: smart_memm
我试图了解 memmove 是如何工作的。我举一个例子,我以这种方式在内存中保存数据。 Start at 0 First Memory Block(A) of size 10 Hence A->(0,
我有以下代码,我试图在其中创建一个长度为 7 字节的缓冲区,然后将网络字节顺序中的整数与缓冲区中的 char 数组一起放入,最后我不应该有 Null 字符我的 sprintf() 缓冲区,所以我使用
我是一名优秀的程序员,十分优秀!