我想獲得一個指向這個數組的第四個元素的指針,但是當我這樣做的時候,我總是收到類型不匹配的錯誤。我究竟做錯了什麼?我該如何解決?如何增加這個字符串的基地址?
int main()
{
char str[]="0111010";
str = str+3;
printf("%s",str);
return 0;
}
我想獲得一個指向這個數組的第四個元素的指針,但是當我這樣做的時候,我總是收到類型不匹配的錯誤。我究竟做錯了什麼?我該如何解決?如何增加這個字符串的基地址?
int main()
{
char str[]="0111010";
str = str+3;
printf("%s",str);
return 0;
}
線
str = str + 3;
是不合法的C代碼。在C中,您不能將一個數組變量分配給另一個數組變量。 (沒有根本的原因,爲什麼語言不能完成這項工作;它只是不被支持。)
這就是說,表達式str + 3
是一個完全合法的表達式,導致指向第三個(零索引)數組的元素。你可以通過編寫
printf("%s\n", str + 3);
或通過寫
char* midPtr = str + 3;
printf("%s\n", midPtr);
無論哪種方法效果打印。如果您只需要這樣做一次,那麼第一個可能會更容易;如果您計劃多次使用該指針,則第二個更容易一些。
*語言無法完成這項工作的根本原因* - 是否避免了一個額外的間接性是一個有效的理由? –
絕對是哦。該評論的目的更多地在於「可以設想一種可行的語言」,而不是「愚蠢的C,你設計得不好」。 – templatetypedef
char * ptr = str + 3; printf(「%s」,ptr); –
你不能寫入數組的地址....所以'str = str + 3;'是無效的。你需要一個新的指針。 'char * str2 = str + 3;''或直接'printf(「%s」,str + 3);'如果只是你想要的打印 –