7

このような作品を作るにはどうすればよいですか?

void *memory = malloc(1000);  //allocate a pool of memory
*(memory+10) = 1;  //set an integer value at byte 10
int i = *(memory+10);  //read an integer value from the 10th byte
4

3 に答える 3

6

簡単な例:メモリをunsignedcharの配列として扱います

void *memory = malloc(1000);  //allocate a pool of memory
uint8_t *ptr = memory+10;  
*ptr = 1 //set an integer value at byte 10
uint8_t i = *ptr;  //read an integer value from the 10th byte

整数も使用できますが、一度に設定するバイト数に注意する必要があります。

于 2012-07-15T10:05:47.263 に答える
4

ルールは単純です:

  • すべてのポインター型(関数ポインターを除く)は、損失なしにvoid*との間でキャストできます。
  • void *ポインターに対してポインター演算を実行したり、それらを逆参照したりすることはできません。
  • sizeof(char)は、定義上1に等しくなります。したがって、charポインターをインクリメントするということは、「生の」ポインター値に「1を追加する」ことを意味します。

このことから、「生の」ポインタ演算を実行する場合は、char*との間でキャストする必要があると結論付けることができます。

于 2012-07-15T10:52:54.430 に答える
3

したがって、「作業」とは、「ポインタ演算を逆参照/実行するにはどうすればよいか」という意味だと思いますvoid*。できません; char*通常、メモリのチャンクの読み取りだけに関心がある場合は、キャストする必要があります。もちろん、その場合は、最初にそれを宣言するだけchar*です。

于 2012-07-15T09:55:12.683 に答える