L作为增量运算符所需的值 - C.

Ari*_*n.K 5 c lvalue

我刚从朋友处得到一个问题.

#include<stdio.h>

void fun(int[][3]);

int main(void){
    int a[3][3]={1,2,3,4,5,6,7,8,9};

    fun(a);
    printf("\n%u",a);
    a++;//Ques 1

    printf("\n%u",a);
    printf("%d",a[2][1]-a[1][2]);

    return 0;
}

void fun(int a[][3]){
    ++a;//Ques 2
    a[1][1]++;
}
Run Code Online (Sandbox Code Playgroud)

第1行将抛出L值的错误,因为'a'是二维数组的名称.但是,对于第2行的情况,情况并没有发生.

谁能明白这个疑问?

Mik*_*CAT 7

在Ques 1中,a是一个数组,当用作运算++符的操作数并发出编译错误时,它将转换为非左值指针.

在Ques 2中,参数int a[][3]等价于int (*a)[3]并且++a是指针变量的增量,这是可以接受的.

N1570 6.7.6.3函数声明符(包括原型),第7段:

参数声明为''类型数组''应调整为''限定指向类型'',其中类型限定符(如果有)是在数组类型派生的[和]中指定的那些.