2013-05-09 28 views
7

在以下代碼:*(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

+1

我不擅長C語言,但也許你不能雙重增加(即''++'運算符)數組。 – Voitcus 2013-05-09 07:00:47

+9

完全脫離主題,但'void main()'==不好!當你認爲'void main()'時,有人用棍子毆打你。 'int main()',總是! – Yuushi 2013-05-09 07:01:43

回答

26

a警告的差是一個數組對象,而不是一個指針,以便您無法使用數組對象的操作a++ 。因爲這相當於:

a = a+ 1; 

這裏你分配給數組對象未在C.

a + 1返回一個指針允許您a數組的元素1的新值,它是允許的

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)); 
} 
+0

'a'絕不是一個const指針。這是一個數組。 – 2013-09-21 09:38:50

+1

@ H2CO3我說'假設''a'是一個常量指針。我沒有把它叫做const指針。 – 2013-09-22 18:23:41

+0

但這也是錯誤的... – 2013-09-22 18:25:27

4

好吧嚴重不良編碼實踐,你可以做到這一點:不過讓我們先解決您的問題:

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

+0

另外'a ++'評估爲'a'的舊值並且'a'的存儲值遞增(後增量) – Joe 2013-08-03 13:09:56

相關問題