1. ホーム
  2. c++

[解決済み] ボイドの大きさは?

2023-08-06 20:24:01

質問

この文は何を意味するでしょうか?

void *p = malloc(sizeof(void));


編集部:質問の延長です。

GCCコンパイラでsizeof(void)が1を出した場合、1バイトのメモリが確保され、ポインタpがそのバイトを指し、p++は0x2346までインクリメントされるでしょうか?仮にpが0x2345だったとします。私はpについて話しているのであって、*pについて話しているのではありません。

どのように解決するのですか?

タイプ void はサイズがありません。これはコンパイルエラーになります。同じ理由で、次のようなこともできません。

void n;

EDIT 驚いたことに、これを行うことで sizeof(void) は実際に するのです。 は GNU C でコンパイルされます。

$ echo 'int main() { printf("%d", sizeof(void)); }' | gcc -xc -w - && ./a.out 
1

しかし、C++ではそうではありません。

$ echo 'int main() { printf("%d", sizeof(void)); }' | gcc -xc++ -w - && ./a.out 
<stdin>: In function 'int main()':
<stdin>:1: error: invalid application of 'sizeof' to a void type
<stdin>:1: error: 'printf' was not declared in this scope