Tôi đã xem xét lập trình C và chỉ có một vài điều làm phiền tôi.
Hãy lấy mã này làm ví dụ:
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);
Tôi biết rằng một int có thể giữ giá trị tối đa là 2.147.483.647. Vì vậy, bằng cách vượt qua điều đó, nó có "tràn" sang địa chỉ bộ nhớ tiếp theo khiến phần tử 2 xuất hiện dưới dạng "-2147483648" tại địa chỉ đó không? Nhưng điều đó không thực sự có ý nghĩa bởi vì trong đầu ra, nó vẫn nói rằng địa chỉ tiếp theo giữ giá trị 4, sau đó 5. Nếu số đó đã tràn sang địa chỉ tiếp theo thì điều đó sẽ không thay đổi giá trị được lưu trữ tại địa chỉ đó ?
Tôi mơ hồ nhớ từ lập trình trong MIPS hội và xem các địa chỉ thay đổi giá trị trong chương trình từng bước rằng các giá trị được gán cho các địa chỉ đó sẽ thay đổi.
Trừ khi tôi nhớ không chính xác thì đây là một câu hỏi khác: Nếu số được gán cho một địa chỉ cụ thể lớn hơn loại (như trong myArray [2]) thì nó có ảnh hưởng đến các giá trị được lưu trữ ở địa chỉ tiếp theo không?
Ví dụ: Chúng tôi có int myNum = 4 tỷ tại địa chỉ 0x10010000. Tất nhiên myNum không thể lưu trữ 4 tỷ vì vậy nó xuất hiện dưới dạng một số âm tại địa chỉ đó. Mặc dù không thể lưu trữ số lượng lớn này, nhưng nó không ảnh hưởng đến giá trị được lưu trữ tại địa chỉ tiếp theo là 0x10010004. Chính xác?
Các địa chỉ bộ nhớ chỉ có đủ không gian để chứa các kích thước số / ký tự nhất định và nếu kích thước vượt quá giới hạn thì nó sẽ được thể hiện khác nhau (như cố lưu 4 tỷ vào int nhưng nó sẽ xuất hiện dưới dạng số âm) và do đó, nó không có hiệu lực đối với các số / ký tự được lưu trữ tại địa chỉ tiếp theo.
Xin lỗi nếu tôi quá nhiệt tình Tôi đã có một bộ não lớn đánh rắm cả ngày từ điều này.
int c = INT.MAXINT; c+=1;
và xem điều gì đã xảy ra với c.