物理アドレス0番地にはリセットベクタでブートローダが入っている(ことが多い)
仮想アドレス0番地にはNULLが入っている
#include <stdio.h>
int sum(int array[]);
int main(void){
int vector[5];
printf("len=%zu\n",sizeof(vector)/sizeof(int));
sum(vector);
}
int sum(int array[]){
printf("len=%zu\n",sizeof(array)/sizeof(int));
return 0;
}
とすると以下のようになる。
len=5
len=2
配列を宣言したスコープ内では確保したサイズから要素数を取得できるが、引数として渡すと確保したサイズが取得できないため要素数を取得できない。
つまり配列を引数として渡すことはできない(ポインタ扱いになる)
ここによるとhttps://www.jpcert.or.jp/sc-rules/c-arr01-c.html
配列型又は関数型を持つと宣言された仮引数に適用する場合、sizeof 演算子は、型調整された(ポインタ)型の大きさを与える。