[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 08/05 19:05 / Filesize : 169 KB / Number-of Response : 711
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門編)Part 94



447 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 15:01:37.70 ]
コマンドライン引数で、コマンドのオプション処理のところなんですが

if(**(++argv)=='-'){
 switch(*++(*argv)){
  case 't':
 }
}
のように++(*argv)のポインタの移動で、argv[1][0]→argv[1][1]の処理が出来るのに、
double型4*3の配列の行ごとの合計を求めて表示する関数
void sum(double z[][3],int n){ //nは行数=4
で受け取って
for(i=0;i<n;i++){
 for(j=0;j<3;j++)
  sum+=*++(*z);  //←ここでエラーが出ます
 printf("%d行めの合計は%f\n",sum);
 z++;
}
だとコンパイラからは「インクリメントの被演算子として左辺値が必要です。」とエラーが吐かれます
"sum+=**z;"は通りますが、その次に"++(*z);"を入れると、「二項演算子 + への無効な被演算子です (‘double[3]’ と ‘int’)」とエラーが出ます
そこで、該当個所を
「sum += *(*z+j);」にするとコンパイラも通り、期待通りの挙動をしてくれるのですが
配列z[i]の要素の、配列の要素z[i][j]を指すポインタをインクリメントするといったことはできないのでしょうか?
上の例で、それができる理由などはありますか?






[ 続きを読む ] / [ 携帯版 ]

全部読む 前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<169KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef