Saya telah meninjau pemrograman C dan hanya ada beberapa hal yang mengganggu saya.
Mari kita ambil kode ini sebagai contoh:
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);
Saya tahu bahwa int dapat memiliki nilai maksimum positif 2.147.483.647. Jadi dengan pergi satu ke itu, apakah itu "tumpah" ke alamat memori berikutnya yang menyebabkan elemen 2 muncul sebagai "-2147483648" di alamat itu? Tapi kemudian itu tidak masuk akal karena dalam output masih mengatakan bahwa alamat berikutnya memegang nilai 4, lalu 5. Jika nomor tersebut telah tumpah ke alamat berikutnya maka tidak akan mengubah nilai yang disimpan di alamat itu ?
Saya samar-samar ingat dari pemrograman di Majelis MIPS dan menonton alamat mengubah nilai selama program langkah demi langkah bahwa nilai yang ditugaskan ke alamat tersebut akan berubah.
Kecuali jika saya salah mengingat maka berikut adalah pertanyaan lain: Jika nomor yang ditugaskan ke alamat tertentu lebih besar dari jenisnya (seperti di myArray [2]) maka apakah itu tidak mempengaruhi nilai yang disimpan di alamat berikutnya?
Contoh: Kami memiliki int myNum = 4 miliar di alamat 0x10010000. Tentu saja myNum tidak dapat menyimpan 4 miliar sehingga muncul sebagai angka negatif di alamat itu. Meskipun tidak dapat menyimpan jumlah besar ini, itu tidak berpengaruh pada nilai yang disimpan di alamat berikutnya 0x10010004. Benar?
Alamat memori hanya memiliki ruang yang cukup untuk menampung ukuran angka / karakter tertentu, dan jika ukurannya melampaui batas maka akan direpresentasikan secara berbeda (seperti mencoba menyimpan 4 miliar ke int tetapi akan muncul sebagai angka negatif) dan sehingga tidak berpengaruh pada angka / karakter yang tersimpan di alamat selanjutnya.
Maaf jika saya berlebihan. Saya sudah memiliki otak besar kentut sepanjang hari dari ini.
int c = INT.MAXINT; c+=1;
dan lihat apa yang terjadi pada c.