a + 1
a
ikinci elemanın adresi ve aynı zamanda (tanım olarak &*(a + 1)
eşdeğerdir) &a[1]
olarak yazılabilir.
*(a + 1)
ikinci dizinin atıfta bir lvalue olup. Tanım olarak
a[1]
'a eşdeğerdir. Sadece işaretçi çürümeye başka dizi gibi
bu lvalue bu için, yani,
&a[1][0]
zayıflar gelir dizinin ilk elemanı için bir işaretçi düşer. Fakat bu, dizi nesnesinin kendisine eşdeğerdir. Yani değeri yukarıda ifade
a + 1
değerini tanımlı hangi hassasiyette olan ...
&a[1]
ait aynıdır. İkinci sokulması için en uygun
operator<<(void const*)
çünkü dizi bir işaretçi çürümüş
not edin. Bu yardımcı olabilecek
int (*p1)[3] = a + 1;
int (&p2)[3] = *(a + 1); // We could also have written *p1
int* p3 = p2; // The array-to-pointer decay
assert(static_cast<void*>(p1) == static_cast<void*>(p3));
düşünün: http://www.fredosaurus.com/notes-cpp/arrayptr/23two-dim-array-memory-layout.html –
@AndyG, '* (a + 1)' a [1] 'dır, a [1] [0]' dır. –