前期中間テストの答案返却
前期中間試験の返却と解答の解説を行う。
今年の学生は、3年で私がプログラミング応用を担当していないので、私が例年3年に出題していた以下のような問題が苦手だろうということで、出題した問題。ポインタと構造体と配列が絡む問題は、式の意味を理解するためにも、C言語の演算子の優先順位などを踏まえ、こういった問題を知っておくべき。
また、上記のような問題では、C言語でのポインタと配列の意味を理解してもらうために、例年説明する極端なコーディングも紹介しておいた。
int a[5] = { 11 , 22 , 33 , 44 , 55 } ; int* pi ; pi = a + 2 ; printf( "%d¥n" , *pi ) ; // *( pointer + offset ) printf( "%d¥n" , pi[0] ) ; // と pointer[ offset ] は同じ printf( "%d¥n" , *(pi + 1) ) ; // 44 printf( "%d¥n" , pi[ 1 ] ) ; // 44 printf( "%d¥n" , (-1)[ pi ] ) ; // 22 = *( -1 + pi ) printf( "%c¥n" , "abcdef"[ 2 ] ) ; // c
「 printf( “%d¥n” , -1[ pi ] ) ; 」の結果が -44 になった。一瞬なんでや…って思ったけど、-( 1[pi] ) なのね。