是否允許比較char *
類型的兩個指針像在片段中p<pkt+n
?如果不允許,是否有更好的方法來取代條件?是它允許比較類型`字符*的兩個指針`
int n = 40;
char *pkt = malloc(4);
...
char *p;
p=pkt;
while(p<pkt+n){
...
p+=4;
...
p++;
..blabla
}
是否允許比較char *
類型的兩個指針像在片段中p<pkt+n
?如果不允許,是否有更好的方法來取代條件?是它允許比較類型`字符*的兩個指針`
int n = 40;
char *pkt = malloc(4);
...
char *p;
p=pkt;
while(p<pkt+n){
...
p+=4;
...
p++;
..blabla
}
是的,它是允許的。請注意,您只分配了4個字節,但您將繼續循環40個字節。
如果兩個指針指向同一個「對象」,例如單個內存分配,相同的結構或相同的數組,它是允許的。
編譯器通常會允許您比較指向不同對象的指針,但結果不能保證有任何特定的含義。例如,
char *x = malloc(10);
char *y = malloc(10);
if (y > x) { ... }
編譯器(可能)都不會抱怨if語句的比較,但它不能保證有什麼特別的意義。然而,在大多數平臺上,這實際上會比較你所期望的地址。
只要參與比較的指針指向同一個數組的元素或超過其末尾的一個步驟,原始條件就是有效的。你也可以用等價條件
while (p - pkt < n)
更換後者變異比較整數而不是指針,但仍然依賴於你原來的變體確實非常相同的指針性。換句話說,這只是個人品味的問題。
對於任何有效的指針(包括空指針),都允許使用'=='和'!='比較。只有當兩個指針指向同一個數組的元素或者剛剛超過它的末尾時,才允許'<''等。爲此,單個對象被視爲1元素數組。 –
我的回答有點匆忙,所以我專注於問題的背景。對於那個很抱歉。 –