SORU
3 Aralık 2014, ÇARŞAMBA


İş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
3 Aralık 2014, ÇARŞAMBA


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MofoHifi Records

    MofoHifi Rec

    15 HAZİRAN 2006
  • sonia989

    sonia989

    26 EKİM 2006
  • Toddler Fun Learning

    Toddler Fun

    8 ŞUBAT 2013