CreateFileMapping函数返回一个指向内存映射文件的指针,我想将该内存映射视为一个数组。
这是我基本上想做的事情:
char Array[] = (char*) CreateFileMapping(...);
除了显然我不能简单地挥动手臂并声明指针现在是一个数组。
你们有什么想法我能做到这一点吗?我不想将指针指向的值复制到数组中,因为这会对大文件使用太多内存。
非常感谢,
答案 0 :(得分:22)
你不需要。您可以将指针索引为数组:
char* p = (char*)CreateFileMapping(...);
p[123] = 'x';
...
答案 1 :(得分:5)
在C / C ++中,指针和数组并不是一回事。
但在你的情况下,为了你的目的,他们是。
你有一个指针。
你可以给它一个下标。
E.g。 char *指针指向“hello”
的开头指针[0]是第一个字符'h'
指针[1]是第二个字符'e'
所以只要在考虑数组时就对待它。
答案 2 :(得分:2)
“在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.
希望这有帮助。
答案 3 :(得分:1)
但是如何指针与数组不同?
有什么问题
char *Array = (char*)CreateFileMapping(...);
您可以将Array
或多或少视为从现在开始处理数组。
答案 4 :(得分:1)
您可以使用C风格的演员:
char *p = (char*)CreateFileMapping(...);
p[123] = 'x';
或首选的重新解释:
char *p std::reinterpret_cast<char*>(CreateFileMapping(...));
p[123] = 'x';
答案 5 :(得分:-1)
我也在寻找这个答案。您需要做的是创建自己的数组类型。
static const int TickerSize = 1000000;
int TickerCount;
typedef char TickerVectorDef[TickerSize];
您还可以将指针转换为此新类型。否则你会得到“编译器错误C2440”。它必须是固定大小的阵列。如果仅将它用作指针,则不会分配实际内存(指针本身除4-8个字节外)。