ポインタのデータのサイズを取得する方法を確認するために、次のコードを試しました。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char *test_char_ptr = "This is just a test";
int *test_int_ptr = (int *) malloc(16*sizeof(int));
for(int i = 0; i<16; i++){
test_int_ptr[i] = i;
}
printf("%s\n",test_char_ptr);
printf("Test char 1: %d\n", (int)sizeof test_char_ptr );
printf("Test char 2:%d\n", (int)sizeof *test_char_ptr );
printf("Test char 3: %d\n", (int)((strlen(test_char_ptr)+1) * sizeof(char)));
printf("Test int 1:%d\n", (int)sizeof test_int_ptr );
printf("Test int 2:%d\n", (int)sizeof *test_int_ptr );
return EXIT_SUCCESS;
}
そして、コードの出力は(32ビットgcc 4.3の場合):
This is just a test
Test char 1: 4
Test char 2:1
Test char 3: 20
Test int 1:4
Test int 2:4
sizeof(* test_char_ptr)を使用すると、*test_char_ptr内のデータのサイズがわかると思いました。しかし、代わりに1が返されました。これは、データではなくcharのsizeofだと思います。test_int_ptrについても同じです。簡単に言うと、私の質問は、ポインタまたは動的にメモリが割り当てられた配列内のデータのサイズを取得するにはどうすればよいかということです。