数値が大きすぎる場合、次のメモリ位置にあふれますか?
私は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]のように)よりも大きい場合、後続のアドレスに格納されている値には影響しませんか? 例:int myNum = 40億がアドレス0x10010000にあります。もちろん、myNumは40億を保存できないため、そのアドレスでは負の数として表示されます。この大きな数を格納することはできませんが、後続のアドレス0x10010004に格納されている値には影響しません。正しい? メモリアドレスには、特定のサイズの数字/文字を保持するのに十分なスペースがあり、サイズが制限を超えた場合、異なるように表示されます(intに40億を格納しようとしているが、負の数として表示されます)そのため、次のアドレスに保存されている数字/文字には影響しません。 船外に行ったら申し訳ありません。私はこれから一日中大きな脳のおならをしていました。