在C ++中将指针转换为数组

时间:2009-08-20 22:13:46

标签: c++ arrays pointers memory-mapping

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

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

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

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

你们有什么想法我能做到这一点吗?我不想将指针指向的值复制到数组中,因为这会对大文件使用太多内存。

非常感谢,

6 个答案:

答案 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个字节外)。