2

CreateFileMapping 函数返回一个指向内存映射文件的指针,我想将该内存映射视为一个数组。

这就是我基本上想做的事情:

char Array[] = (char*) CreateFileMapping(...);

除了显然我不能简单地挥动手臂并声明指针现在是一个数组。

你们知道我该怎么做吗?我不想将指针指向的值复制到数组中,因为这将对大文件使用过多的内存。

非常感谢,

4

6 回答 6

22

你不需要。您可以像索引数组一样索引指针:

char* p = (char*)CreateFileMapping(...);
p[123] = 'x';
...
于 2009-08-20T22:15:19.660 回答
5

在 C/C++ 中,指针和数组不是一回事。

但就您而言,出于您的目的,它们是。

你有一个指针。

你可以给它一个下标。

例如,一个 char* 指针指向“hello”的开头

指针[0] 是第一个字符 'h'

指针[1] 是第二个字符 'e'

因此,只需将其视为您正在考虑的数组。

于 2009-08-20T22:17:02.557 回答
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.

希望这可以帮助。

于 2009-09-04T18:22:15.277 回答
1

但是指针与数组有什么不同呢?有什么问题

char *Array = (char*)CreateFileMapping(...);

从现在开始,您可以Array或多或少地像对待数组一样对待。

于 2009-08-20T22:16:14.430 回答
1

您可以使用 C 风格的演员表:

char *p = (char*)CreateFileMapping(...);
p[123] = 'x';

或者首选的重新解释演员表:

char *p std::reinterpret_cast<char*>(CreateFileMapping(...));
p[123] = 'x';
于 2009-08-21T05:24:54.943 回答
-2

我也在寻找这个答案。您需要做的是创建自己的数组类型。

    static const int TickerSize = 1000000;
    int TickerCount;
    typedef char TickerVectorDef[TickerSize];

您还可以将指针转换为这种新类型。否则你会得到“编译器错误 C2440”。它必须是一个固定大小的数组。如果仅将其用作指针,则不会分配实际内存(指针本身的 4-8 字节除外)。

于 2011-05-26T09:23:18.137 回答