문제

CreateFileMapping 함수는 메모리 매핑된 파일에 대한 포인터를 반환하며 해당 메모리 매핑을 배열로 처리하고 싶습니다.

내가 기본적으로 하고 싶은 일은 다음과 같습니다.

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

분명히 팔을 흔들고 포인터가 이제 배열이라고 선언할 수는 없다는 점만 빼면요.

내가 어떻게 할 수 있는지 아시나요?포인터가 가리키는 값을 배열에 복사하고 싶지 않습니다. 큰 파일에 너무 많은 메모리를 사용하게 되기 때문입니다.

무리 감사,

도움이 되었습니까?

해결책

그럴 필요는 없습니다.마치 배열인 것처럼 포인터를 인덱싱할 수 있습니다.

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

다른 팁

C/C++에서 포인터와 배열은 같은 것이 아닙니다.

그러나 귀하의 경우에는 귀하의 목적에 부합합니다.

포인터가 있습니다.

아래 첨자를 줄 수 있습니다.

예:char* 포인터는 "hello"의 시작을 가리킵니다.

포인터[0]은 첫 번째 문자 'h'입니다.

포인터[1]은 두 번째 문자 'e'입니다.

따라서 배열에 대해 생각하는 것처럼 처리하십시오.

"C / C ++에서 포인터와 배열은 같은 것이 아닙니다." 는 사실이지만 배열의 변수 이름은 포인터 const 와 동일합니다 (이것은 내가 기억하는 오래된 Coriolis C ++ Black Book에서 가져온 것입니다).재치있게 말하자면:

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바이트 제외).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top