7

在以下代码中:

void main()
{
    char a[]={1,5,3,4,5,6};
    printf("%d\n",*(a++)); //line gives error: wrong type argument to increment
    printf("%d\n",*(a+1));
}

第 4 行和第 5 行有什么区别。第 5 行没有出现任何错误或警告。

4

3 回答 3

28

a是一个数组对象,而不是一个指针,所以你不能使用a++ 数组对象的操作。因为这相当于:

a = a+ 1;

在这里,您为数组对象分配了一个 C 中不允许的新值。

a + 1返回指向a数组元素 1 的指针,这是允许的

于 2013-05-09T07:01:00.057 回答
4

好的严重错误的编码实践:但是,让我们首先解决您的问题:

printf("%d\n",*(a++)); //this lines gives error: wrong type argument to increment

不能使用,因为 a 是对数组的隐式引用;

你可以这样做:

char b[]={1,5,3,4,5,6};
char *a = b;
printf("%d\n",*(a++)); //this lines will not give errors any more

然后你就走了……

*(a++)不同于*(a+1)因为++尝试修改操作数而+只是将一个添加到常a量值。

于 2013-05-09T07:14:29.893 回答
3

'a' 的行为类似于 const 指针。'a' 不能改变它的值或它指向的地址。这是因为编译器静态分配了数组大小的内存,并且您正在更改它所引用的地址。

您可以按以下方式进行

void main()
{
char a[]={1,5,3,4,5,6};
char *ch;
ch=a;
printf("%d\n",*(ch++)); //this lines gives error no more
printf("%d\n",*(ch+1));
}
于 2013-05-09T07:06:54.287 回答