2017-03-29 18 views
1

我想獲得一個指向這個數組的第四個元素的指針,但是當我這樣做的時候,我總是收到類型不匹配的錯誤。我究竟做錯了什麼?我該如何解決?如何增加這個字符串的基地址?

int main() 
    { 
     char str[]="0111010"; 
     str = str+3; 
     printf("%s",str); 
     return 0; 
    } 
+0

char * ptr = str + 3; printf(「%s」,ptr); –

+0

你不能寫入數組的地址....所以'str = str + 3;'是無效的。你需要一個新的指針。 'char * str2 = str + 3;''或直接'printf(「%s」,str + 3);'如果只是你想要的打印 –

回答

0

str = str + 3; 

是不合法的C代碼。在C中,您不能將一個數組變量分配給另一個數組變量。 (沒有根本的原因,爲什麼語言不能完成這項工作;它只是不被支持。)

這就是說,表達式str + 3是一個完全合法的表達式,導致指向第三個(零索引)數組的元素。你可以通過編寫

printf("%s\n", str + 3); 

或通過寫

char* midPtr = str + 3; 
printf("%s\n", midPtr); 

無論哪種方法效果打印。如果您只需要這樣做一次,那麼第一個可能會更容易;如果您計劃多次使用該指針,則第二個更容易一些。

+0

*語言無法完成這項工作的根本原因* - 是否避免了一個額外的間接性是一個有效的理由? –

+0

絕對是哦。該評論的目的更多地在於「可以設想一種可行的語言」,而不是「愚蠢的C,你設計得不好」。 – templatetypedef