C言語なら俺に聞け(入門編)Part 94
■ このスレッドは過去ログ倉庫に格納されています
0447デフォルトの名無しさん
2011/12/31(土) 15:01:37.70if(**(++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]を指すポインタをインクリメントするといったことはできないのでしょうか?
上の例で、それができる理由などはありますか?
■ このスレッドは過去ログ倉庫に格納されています