Bir işaretçiye 1 eklediğinizde, sonuç bir sonraki nesnenin sivri uçlu tipteki nesneler dizisindeki (yani bir dizi) konumudur. Eğer pbir noktalarından intnesne, daha sonra p + 1bir sonraki işaret eder intbir sırayla. Eğer pbir 5-eleman dizisine noktası int(bu durumda, ifade &a), daha sonra p + 1bir sonraki işaret eder , 5-elemanlı bir dizininint bir sırayla.
İki işaretçi çıkarmak (her ikisi de aynı dizi nesnesine işaret ediyorsa veya biri dizinin son öğesinin ötesine işaret ediyorsa) bu iki işaretçi arasındaki nesne sayısını (dizi öğeleri) verir.
İfade &a, adresini verir ve atürüne sahiptir int (*)[5](işaretçi ile 5 öğeli dizi int). Sentezleme &a + 1sonraki 5-elemanlı bir dizinin adresi verir int, aşağıdaki ave ayrıca türü vardır int (*)[5]. İfade *(&a + 1), sonucunu, bu bağlamda bir tür ifadesine "çürüten" son elemanın son elemanının &a + 1adresini verecek ve türe sahip olacak şekilde deregre eder .intaint [5]int *
Benzer şekilde, ifade adizinin ilk öğesine bir göstergeye "bozulur" ve türü vardır int *.
Bir resim yardımcı olabilir:
int [5] int (*)[5] int int *
+---+ +---+
| | <- &a | | <- a
| - | +---+
| | | | <- a + 1
| - | +---+
| | | |
| - | +---+
| | | |
| - | +---+
| | | |
+---+ +---+
| | <- &a + 1 | | <- *(&a + 1)
| - | +---+
| | | |
| - | +---+
| | | |
| - | +---+
| | | |
| - | +---+
| | | |
+---+ +---+
Bu, aynı depolamanın iki görünümüdür - solda, 5 elementli dizilerin intbir dizisi olarak görüyoruz, sağda ise bir dizisi olarak görüyoruz int. Ayrıca çeşitli ifadeleri ve türlerini de gösteriyorum.
Unutmayın, ifade tanımsız davranışla*(&a + 1) sonuçlanır :
...
Eğer sonuç dizi nesnesinin son elemanını geçerse, değerlendirilen tekli * işlecinin işleneni olarak kullanılmamalıdır.
C 2011 Çevrimiçi Taslak , 6.5.6 / 9
&a + 1geçerli bir nesneye işaret etmiyor, bu yüzden geçersiz.