gpt4 book ai didi

c++ - 内存集不工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:04:15 25 4
gpt4 key购买 nike

我正在尝试在纯二维数组上使用 memset,使用以下代码:

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
int l[3][3];
memset (l, 1, sizeof(l));
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cout << l[i][j] << " ";
}
cout << endl;
}
return 0;
}

我希望使用以下行将整个数组初始化为 1:

内存设置(l, 1, sizeof(l));

但我没有得到预期的值,它给了我以下输出:

16843009 16843009 16843009 
16843009 16843009 16843009
16843009 16843009 16843009

以为可能是编译器的问题,于是尝试用Ideone:

http://ideone.com/VFYUDg

请帮忙。

最佳答案

memset 处理字节,因此它用 0x01010101 值(假设 int 是 32 位)填充您的整数数组,即十进制 16843009。

如果需要用数字填充二维 C 样式数组:

int l[3][3];
std::fill_n(*l, sizeof l / sizeof **l, 1);

*l 这里将 int[3][3] 衰减为指向数组第一个元素的指针 (int*), sizeof l/sizeof **l 产生数组元素的计数。

它使用了C++要求数组在内存中连续无间隙地布局,因此多维数组与一维数组具有相同的布局。例如。 int [3][3]int[3 * 3] 具有相同的布局。

而且,与 memset 不同,std::fill_n 在对象级别而不是字节级别上操作。对于内置类型,优化版本通常作为 SIMD 指令内联,效率不低于 memset

关于c++ - 内存集不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19707820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com