我學會了this question是遞增NULL指針或過去增加一個陣列的到底是不是良好定義的行爲:正在比較一個指針定義的數組末尾的一個元素嗎?
int* pointer = 0;
pointer++;
int a[3];
int* pointer2 = &a[0];
pointer2 += 4;
但如果指向一個無效的位置指針僅用於比較和記憶在他的位置永遠不會被訪問?
實施例:
void exampleFunction(int arrayLen, char** strArray)
{
for(char** str = strArray; str < strArray + arrayLen; str++) //or even str < &strArray[arrayLen]
{
//here *str is always a pointer to the first char of my string
}
}
在這裏,我我的指針比較過去陣列的端部的指針的一個元素。這是明確的行爲嗎?
表達式'* argv + argc'何時有意義? 'argv [0]'的長度與'argc'沒有關係。如果你的意思是'argv + argc',那麼這是很好的AIUI,因爲指針「超過數組末尾的一個元素」是明確定義的,可以與同一數組中的其他指針進行比較。 (或'argv + argc + 1',因爲正如chux提到的那樣,'argv'以'NULL'結尾)。 – Ryan
@chux很高興知道!我只需要使用'<='。但原來的問題不應該考慮我的錯誤。更好的例子更新 – Winter
你的第二個代碼是OK,因爲'str'總是一個有效的指針。儘管如此,它的最後價值並不是可以去引用的。 – chux