在以下代码中:
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 行没有出现任何错误或警告。
a
是一个数组对象,而不是一个指针,所以你不能使用a++
数组对象的操作。因为这相当于:
a = a+ 1;
在这里,您为数组对象分配了一个 C 中不允许的新值。
a + 1
返回指向a
数组元素 1 的指针,这是允许的
好的严重错误的编码实践:但是,让我们首先解决您的问题:
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
量值。
'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));
}