C programlamayı gözden geçirdim ve beni rahatsız eden birkaç şey var.
Örneğin bu kodu alalım:
int myArray[5] = {1, 2, 2147483648, 4, 5};
int* ptr = myArray;
int i;
for(i=0; i<5; i++, ptr++)
printf("\n Element %d holds %d at address %p", i, myArray[i], ptr);
Bir int'nin maksimum pozitif 2,147,483,647 değerine sahip olabileceğini biliyorum. Öyleyse, bunun üzerinden geçerek, eleman 2'nin bu adreste "-2147483648" olarak görünmesini sağlayan bir sonraki hafıza adresine "akıyor" mu? Ama sonra bu gerçekten bir anlam ifade etmiyor çünkü çıktıda hala bir sonraki adresin 4, 5 değerine sahip olduğunu söylüyor. Eğer sayı bir sonraki adrese taşmış olsaydı, o zaman o adreste saklanan değeri değiştirmezdi. ?
MIPS Assembly'de programlamayı ve program adreslerinin adres değiştirme değerlerini adım adım izleyerek bu adreslere atanan değerlerin değişeceğini hatırlıyorum.
Yanlış hatırlamıyorsam, o zaman burada başka bir soru var: Belirli bir adrese atanan numara türden daha büyükse (myArray [2] 'de olduğu gibi), o zaman bir sonraki adreste saklanan değerleri etkilemez mi?
Örnek: 0x10010000 adresinde int myNum = 4 milyar var. Tabii ki myNum 4 milyar depolayamıyor, bu yüzden bu adreste negatif bir rakam gibi görünüyor. Bu büyük sayıyı saklayamamakla birlikte, sonraki 0x10010004 adresinde depolanan değer üzerinde hiçbir etkisi yoktur. Doğru?
Hafıza adresleri sadece belirli boyutlarda sayı / karakterleri tutacak kadar yeterli alana sahiptir ve boyut limitin üzerine çıkarsa, farklı şekilde temsil edilir (4 milyar int'ye depolanmaya çalışılır ancak negatif bir sayı olarak görünür) ve dolayısıyla bir sonraki adrede saklanan rakamlar / karakterler üzerinde bir etkisi yoktur.
Eğer denize düştüysem özür dilerim. Bundan bütün gün büyük bir beyin osuruğu geçirdim.
int c = INT.MAXINT; c+=1;
ve c'ye ne olduğunu görün.