Namaran

Code daily. Without assist.

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

408を1行ずつ。mainarrは本物の配列型なので、sizeofは要素10個分のバイト数(4×10=40)を返します。一方、関数の仮引数として書いたint arr[10]は実際にはint *型として扱われる、というCの規則があります(配列を関数に渡すと先頭要素へのポインタに読み替えられ、`[10]`という長さの情報は失われます)。そのためshowの中のarrはただのポインタ変数で、sizeof(arr)はポインタ自身のバイト数(8)を返します。