Eu estive revisando a programação C e há apenas algumas coisas me incomodando.
Vamos pegar este código, por exemplo:
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);
Eu sei que um int pode conter um valor máximo de 2.147.483.647 positivo. Então, analisando isso, ele "transborda" para o próximo endereço de memória que faz com que o elemento 2 apareça como "-2147483648" nesse endereço? Mas isso realmente não faz sentido, porque, na saída, ele ainda diz que o próximo endereço contém o valor 4, depois 5. Se o número tivesse transbordado para o próximo endereço, isso não mudaria o valor armazenado nesse endereço? ?
Lembro-me vagamente da programação no MIPS Assembly e de observar os endereços mudarem valores durante o programa passo a passo que os valores atribuídos a esses endereços mudariam.
A menos que eu esteja lembrando incorretamente, eis outra pergunta: se o número atribuído a um endereço específico for maior que o tipo (como em myArray [2]), isso não afetará os valores armazenados no endereço subseqüente?
Exemplo: temos int myNum = 4 bilhões no endereço 0x10010000. É claro que o myNum não pode armazenar 4 bilhões, por isso aparece como um número negativo nesse endereço. Apesar de não poder armazenar esse número grande, ele não afeta o valor armazenado no endereço subsequente de 0x10010004. Corrigir?
Os endereços de memória têm apenas espaço suficiente para armazenar determinados tamanhos de números / caracteres e, se o tamanho ultrapassar o limite, ele será representado de maneira diferente (como tentar armazenar 4 bilhões no int, mas aparecerá como um número negativo) e portanto, não afeta os números / caracteres armazenados no próximo endereço.
Desculpe se eu fui ao mar. Eu tenho tido um grande peido cerebral o dia todo com isso.
int c = INT.MAXINT; c+=1;
que aconteceu com c.