나는 C 프로그래밍을 검토하고 있으며 나를 괴롭히는 몇 가지가 있습니다.
이 코드를 예로 들어 보겠습니다.
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);
int가 최대 2,147,483,647의 최대 값을 보유 할 수 있음을 알고 있습니다. 따라서 그 이상으로 이동하면 다음 메모리 주소로 "유출"되어 해당 주소에서 요소 2가 "-2147483648"으로 표시됩니까? 그러나 출력에서 여전히 다음 주소가 4, 5를 보유한다고 표시하기 때문에 실제로 의미가 없습니다. 번호가 다음 주소로 넘겨지면 해당 주소에 저장된 값이 변경되지 않습니다. ?
MIPS Assembly에서 프로그래밍 한 것을 기억하고 프로그램 단계에서 주소가 값이 변경되는 것을 단계별로 변경하는 것을 기억합니다.
내가 잘못 기억하지 않는 한 여기에 또 다른 질문이 있습니다. 특정 주소에 할당 된 숫자가 유형 (예 : myArray [2])보다 큰 경우 후속 주소에 저장된 값에 영향을 미치지 않습니까?
예 : 주소 0x10010000에 int myNum = 40 억이 있습니다. 물론 myNum은 40 억을 저장할 수 없으므로 해당 주소에 음수로 표시됩니다. 이 큰 수를 저장할 수는 없지만 이후 주소 0x10010004에 저장된 값에는 영향을 미치지 않습니다. 옳은?
메모리 주소는 특정 크기의 숫자 / 문자를 저장할 수있는 충분한 공간을 가지고 있으며 크기가 한계를 초과하면 다르게 표시됩니다 (int에 40 억을 저장하려고 시도하지만 음수로 표시됨). 따라서 다음 주소에 저장된 숫자 / 문자에는 영향을 미치지 않습니다.
내가 배 밖으로 가면 미안해 나는 이것으로부터 하루 종일 주요 뇌 방귀를 앓고 있습니다.
int c = INT.MAXINT; c+=1;
보고 c에 무슨 일이 있었는지보십시오.