■
ちょっと悩んだプログラムネタ。C言語。
typedef struct { int *b; } S_TMP; void fnc_a( const S_TMP *ptmp ) { S_TMP localtmp; localtmp = *ptmp; localtmp.b[0] = 10; localtmp.b[1] = 20; localtmp.b[2] = 30; } int main () { S_TMP tmp; int nList[3] = {0}; tmp.b = nList; fnc_a(&tmp); printf ("%d, %d, %d", nList[0], nList[1], nList[2]); reutrn 0; }
構造体の「*b」もとい、main関数のnListが追加要素だったわけだけど、
わざわざ関数呼び出しにconstを付けている構造体に、
値を返すようなもんを追加しないで欲しいと。
配列とポインタとconstを微妙に混同してるのに、
たまたま上手く動くコードになってる例。*1
実際のコードはこんなシンプルじゃないので結構悩んでたり。
普通に関数に引数追加に書き直し。
*1:constで宣言してても構造体の変数がポインタなら、ローカル変数への値コピーで、ポインタ先の値を変更できちゃうわけか。まぁ考えてみりゃある意味当然。最も書いた本人は、こんな事を意識してなかったそうな。