在以下代碼:*(a ++)給出錯誤但不是*(a + 1)??其中a是數組名稱?
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 + 1)??其中a是數組名稱?
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的新值,它是允許的
'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));
}
'a'絕不是一個const指針。這是一個數組。 – 2013-09-21 09:38:50
@ H2CO3我說'假設''a'是一個常量指針。我沒有把它叫做const指針。 – 2013-09-22 18:23:41
但這也是錯誤的... – 2013-09-22 18:25:27
好吧嚴重不良編碼實踐,你可以做到這一點:不過讓我們先解決您的問題:
printf("%d\n",*(a++)); //this lines gives error: wrong type argument to increment
不能使用,因爲一個是隱式引用陣列;
你可以這樣做:
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 ++'評估爲'a'的舊值並且'a'的存儲值遞增(後增量) – Joe 2013-08-03 13:09:56
我不擅長C語言,但也許你不能雙重增加(即''++'運算符)數組。 – Voitcus 2013-05-09 07:00:47
完全脫離主題,但'void main()'==不好!當你認爲'void main()'時,有人用棍子毆打你。 'int main()',總是! – Yuushi 2013-05-09 07:01:43