Qiita で初めて LGTM をもらって嬉しかったので C言語のネタをもう一つ。
C言語の文法は、ポインタと配列の辺りで混乱がある。
sizeof_and_array.c
// compiled with "gcc -std=c99 -Wall"
# include <stdio.h>
void test( short arg[5] )
{
printf( "arg : %zd\n", sizeof( arg ) );
printf( "*arg : %zd\n", sizeof( *arg ) );
short foo[10];
printf( "foo : %zd\n", sizeof( foo ) );
printf( "*foo : %zd\n", sizeof( *foo ) );
printf( "&foo : %zd\n", sizeof( &foo ) );
printf( "*&foo : %zd\n", sizeof( *&foo ) );
printf( "&*foo : %zd\n", sizeof( &*foo ) );
printf( "0+foo : %zd\n", sizeof( 0+foo ) );
printf( "1?foo:foo : %zd\n", sizeof( 1?foo:foo ) );
}
int main()
{
short a[5]={9,8,7,6,5};
test( a );
return 0;
}
今は大体理解していて、上記のプログラムが何を出力する(べき)なのかを把握できているつもりだが、把握できたのは昨年のことで、それまではわかっていなかった。
何を出力するのかをコメントに書こうかとも思ったが、なんとなくやめておいた。気になる人は実行するのが良いと思う。