İşaretçi bir p için, p < 1 aşırı bir durumda yanlış p olabilir mi?
Mümkün, bir işaretçi değişkeni içinpbup&; ( . lt ^strong>p 1yanlış mı? Cevabınızı açıklayınız. Evet, hangi şartlar altında bu mümkün mü? eğer
P 1 taşma ve 0'a eşit olabilir mi merak ediyorum.
E. g.Bir 64-bit GCC-4.8 ile PC için bir C-dil programı:
int main(void) {
void *p=(void *)0xFFFFFFFFFFFFFFFF;
printf("p :%p\n", p);
printf("p 1 :%p\n", p 1);
printf("Result :%d\n", p<p 1);
}
Döner:
p : 0xffffffffffffffff
p 1 : (nil)
Result : 0
Bu durumda mümkün olduğuna inanıyorum. Geçersiz bir işaretçi konumu için olabilir. Bu aklıma gelen tek çözüm. Başkaları da var mı?
Not: Hayır varsayımlar yapılır. Bu başına gelebilecek bir şans olduğunu ya da değil, herhangi bir derleyici/platform/mimarlık/OS düşünün.
CEVAP
Mümkün, pointer değişken
p<(p 1)
yanlışp
için mi?
p
doğru türde geçerli bir nesne (C nesne modeline göre oluşturulan) işaret ediyorsa, o zaman hayır. p 1
nesne sonra bellek konumuna işaret edecek, ve her zaman p
daha karşılaştırır.
Aksi halde, aritmetik ve karşılaştırma her iki davranışı sonucu doğru, yanlış, ya da sarı bir kızarma olabilir yani tanımsız.
Evet, hangi şartlar altında bu mümkün mü? eğer
Ya da olmayabilir, olabilir
p = reinterpret_cast<char*>(numeric_limits<uintptr_t>::max);
Eğer işaretçi aritmetiği işaretsiz tamsayı aritmetik gibi çalışırsa, o zaman bu sayısal bir taşma p 1
değeri sıfır olan ve daha az p
daha karşılaştıran bu tür neden olabilir. Ya da başka bir şey olabilir.
nasıl aşırı bir işlev için bir işaretç...
Nasıl Ruby alt veya üst durumda bir di...
Teknikleri JavaScript bir sınıf tanıml...
Ne durumda `git pull` zararlı olabilir...
Ne kadar yanlış Gıt şube taahhüdünde d...