2026-09-16
array_sizeof.c
#include <stdio.h>
void show(int arr[10]) {
printf("%zu\n", sizeof(arr));
}
int main(void) {
int arr[10];
printf("%zu\n", sizeof(arr));
show(arr);
}
これは何を出力するでしょうか?(このターゲット環境ではintは4バイト、ポインタは8バイトです)
Answer
40と8を1行ずつ。mainのarrは本物の配列型なので、sizeofは要素10個分のバイト数(4×10=40)を返します。一方、関数の仮引数として書いたint arr[10]は実際にはint *型として扱われる、というCの規則があります(配列を関数に渡すと先頭要素へのポインタに読み替えられ、`[10]`という長さの情報は失われます)。そのためshowの中のarrはただのポインタ変数で、sizeof(arr)はポインタ自身のバイト数(8)を返します。