2011-06-03 88 views
6

數組這可能是基本上微不足道的事情,但它一定程度上脫離了我,迄今..遞增指針的用C

char * a3[2];
a3[0] = "abc";
a3[1] = "def";
char ** p;
p = a3;

這個工程:

printf("%p - \"%s\"\n", p, *(++p));

這不:

printf("%p - \"%s\"\n", a3, *(++a3));

我在編譯得到的我的錯誤是:需要

左值的遞增操作數

什麼我做錯了什麼,爲什麼,什麼是「A3」的解決方案?

+0

a3變量被聲明爲一個字符數組,我認爲你想聲明它是一個指針數組,所以它應該讀取char * a3 [2]而不是char a3 [2] – David 2011-06-03 10:46:35

+0

這是一個錯誤在代碼中複製,你是對的,是的,它是一個指針數組,謝謝你指出 – XXL 2011-06-03 10:51:30

回答

4

a3是一個常量指針,你不能增加它。然而,「p」是可以遞增的a3開始的通用指針。

+0

這似乎是最準確的回覆,謝謝 – XXL 2011-06-03 11:06:38

4

您不能分配到a3,也不能增加它。數組名稱是一個常量,不能更改。

c-faq

+0

@XXL你聲明的方式,'a3'不是指針,句號。你可能在你的問題中錯過了一個'*'('char * a3 [2]'?) – cnicutar 2011-06-03 10:48:27

+0

由於粘貼失敗,它丟失了一個星號,我想聽到的是「數組名稱是恆定的,因此無法修改」 - 這足以說明問題。你原來的回覆中沒有這部分內容,因爲它只是在你編輯了你的文章之後纔出現 - 這就是爲什麼我問了一個「爲什麼」的後續問題。無論如何,現在已經解決了,謝謝 – XXL 2011-06-03 10:56:05

0

嘗試

char *a3Ptr = a3; 
printf("%p - \"%s\"\n", a3, *(++a3Ptr)); 

在C中,字符數組[]是從字符*不同,即使你可以使用一個char *引用字符數組的第一位置。

是不是既指針指針「p」和「a3」指針?

是的,但a3是恆定的。你不能修改它。

0

a3是數組的名稱。這關於它作爲一個常量指針。

你不能改變它。您可以使用a3 + 1而不是++a3

另一個問題*(++a3)參數使用「%s」。由於a3是char數組,因此*a3是一個字符,適當的格式說明符應該是%c

+0

a3是一個char *數組,所以語法應該沒問題......我最初誤讀了它......或者也許它在發佈之後進行了編輯。 – Pablitorun 2011-06-03 14:33:24

0

創建後,您不能增加或指向任何其他字符數組。您需要使用索引進行修改或訪問。 like a[1]