CreateFileMapping 函数返回一个指向内存映射文件的指针,我想将该内存映射视为一个数组。
这就是我基本上想做的事情:
char Array[] = (char*) CreateFileMapping(...);
除了显然我不能简单地挥动手臂并声明指针现在是一个数组。
你们知道我该怎么做吗?我不想将指针指向的值复制到数组中,因为这将对大文件使用过多的内存。
非常感谢,
CreateFileMapping 函数返回一个指向内存映射文件的指针,我想将该内存映射视为一个数组。
这就是我基本上想做的事情:
char Array[] = (char*) CreateFileMapping(...);
除了显然我不能简单地挥动手臂并声明指针现在是一个数组。
你们知道我该怎么做吗?我不想将指针指向的值复制到数组中,因为这将对大文件使用过多的内存。
非常感谢,
你不需要。您可以像索引数组一样索引指针:
char* p = (char*)CreateFileMapping(...);
p[123] = 'x';
...
在 C/C++ 中,指针和数组不是一回事。
但就您而言,出于您的目的,它们是。
你有一个指针。
你可以给它一个下标。
例如,一个 char* 指针指向“hello”的开头
指针[0] 是第一个字符 'h'
指针[1] 是第二个字符 'e'
因此,只需将其视为您正在考虑的数组。
“在 C/C++ 中,指针和数组不是一回事。” 是的,但是,数组的变量名称与指针 const 相同(我记得这是来自我的旧科里奥利 C++ 黑皮书)。以机智:
char carray[5];
char caarray2[5];
char* const cpc = carray; //can change contents pointed to, but not where it points
/*
cpc = carray2; //NO!! compile error
carray = carray2; //NO!! compile error - same issue, different error message
*/
cpc[3] = 'a'; //OK of course, why not.
希望这可以帮助。
但是指针与数组有什么不同呢?有什么问题
char *Array = (char*)CreateFileMapping(...);
从现在开始,您可以Array
或多或少地像对待数组一样对待。
您可以使用 C 风格的演员表:
char *p = (char*)CreateFileMapping(...);
p[123] = 'x';
或者首选的重新解释演员表:
char *p std::reinterpret_cast<char*>(CreateFileMapping(...));
p[123] = 'x';
我也在寻找这个答案。您需要做的是创建自己的数组类型。
static const int TickerSize = 1000000;
int TickerCount;
typedef char TickerVectorDef[TickerSize];
您还可以将指针转换为这种新类型。否则你会得到“编译器错误 C2440”。它必须是一个固定大小的数组。如果仅将其用作指针,则不会分配实际内存(指针本身的 4-8 字节除外)。