İndis üzerinden bir sonunun dizinin bir elemanının adresi: C ile yasal Standart değil mi?
Aşağıdaki kodu C Standardı tarafından izin verilmeyen birkaç kez iddia şimdi gördüm:
int array[5];
int *array_begin = &array[0];
int *array_end = &array[5];
&array[5]
hukuk C kodu bu bağlamda?
Mümkünse Standart bir başvuru ile bir cevap istiyorum.
Ayrıca eğer C standardına uygun olup olmadığını bilmek ilginç olurdu. Ve eğer standart C değil. öyleyse neden bu kararı farklı bir şekilde array 5
&array[4] 1
tedavi etmek için yapıldı?
CEVAP
Evet, yasal. C99 draft standard:
Madde 6.5.2.1, paragraf 2:
Postfix bir ifadeyi köşeli parantez içinde bir ifade
[]
ardından bir alt. bir dizinin bir öğesi belirlenmesi nesne. İndis operatörü *6 tanımı*E1[E2]
(*((E1) (E2)))
. aynı olan. Dönüştürme kuralları içinE1
dizi bir nesne (benzer şekilde, bir işaretçiikili işleç uygulamak, bir dizi nesnenin ilk element) ve
E2
bir tamsayıE1[E2]
E2
-inci atar.E1
element (sıfır dahil).
Madde 6.5.3.2, paragraf 3 (vurgu benim):
&
tekli operatörü işlenen adresini verir. Eğer işlenen türü varsa ‘yazın’, sonuç ‘işaretçi tipi vardır ^em>yazın’. Eğer işlenen*
tekli bir operatör sonucu ise, ne&
operatör bu operatör değerlendirilir ve sonuç hem sanki ne operatörler kısıtlamalar hala geçerli ve sonuç bir o kadar harika değil ihmal lvalue. Aynı şekildeeğer ifadenin sonucu bir[]
operatör, ne & operatörü ne tekli*
olduğunu ima[]
değerlendirilir ve sonuç olarak&
operatör çıkarıldı ve[]
operatörbir operatör için değiştirildi. Aksi takdirde sonuç. nesne veya işlev belirlenmiş işlenen bir işaretçi.
§6.5.6, paragraf 8:
Tamsayı türü olan bir deyim eklendi veya bir işaretçi çıkartılır, sonuç işaretçi işlenen türü vardır. Eğer işaretçi işlenen bir elemanına işaret ediyorsa bir dizi nesne ve dizi yeterince büyük, sonuç unsuru uzaklığı puan sonuç ve orijinal alt simgeler farkı böyle özgün öğesi dizi elemanları tamsayı ifadesi eşittir.
P
ifade noktalarına, diğer bir deyişle,i
-inci dizi nesnenin öğesi, ifadeleri(P) N
(benzerN (P)
) ve(P)-N
N
30 ** değeri (), sırasıyla,i n
incii−n
-inci öğeler için işaret dizi, bulunması koşuluyla nesne.P
ifade puan son için ayrıca dizi bir nesne, ifade(P) 1
öğesi, son öğe geçmiş bir puan eğer ifadeQ
dizi nesnenin son öğe geçen bir işaret,bir dizi nesne ve ifade, dizinin son öğesi için(Q)-1
puan nesne. Her iki işaretçi varsa işlenen ve sonuç aynı dizi nesnesinin elemanları, ya da geçen son bir nokta dizi öğesi, değerlendirme taşma üretmek olmamalıdır; aksi halde, nesnenin davranış tanımsızdır. Eğer sonuç dizi nesne, son öğe geçen bir işaret değerlendirilir*
tekli bir operatör işleneni olarak kullanılamaz.
Standart açıkça işaretçileri dizinin sonunun bir eleman noktası, izin verdiğini unutmayınonlar başvuru yapıldı . sağlanan . 6.5.2.1 ve 6.5.3.2, ifade &array[5]
dizinin sonunun bir işaret (array 5)
eşdeğer &*(array 5)
eşdeğer. Bu yasal bir başvuru (6.5.3.2) neden olmaz.
OS adb erişebilir X Terminal üzerinden...
Neden bir c sınıfı standart bir dize s...
Sunucu üzerinden indirmek için değil, ...
Neden't standart Python dahil PyP...
't başarı üzerinde yöntem çağrısı...