コマンドライン引数で、コマンドのオプション処理のところなんですが

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]を指すポインタをインクリメントするといったことはできないのでしょうか?
上の例で、それができる理由などはありますか?