আমি সি প্রোগ্রামিং পর্যালোচনা করে এসেছি এবং কেবল দু'টো জিনিস আমাকে বিরক্ত করছে।
উদাহরণস্বরূপ এই কোডটি নেওয়া যাক:
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 এর সর্বোচ্চ মান ধরে রাখতে পারে। সুতরাং এটির ওপরে গিয়ে, এটি কি পরবর্তী মেমরি ঠিকানায় "ছড়িয়ে পড়ে" যার ফলে উপাদানটি সেই ঠিকানায় "-2147483648" হিসাবে উপস্থিত হয়? তবে তারপরেও এটি সত্যিকার অর্থে আসে না কারণ আউটপুটে এটি এখনও বলেছে যে পরবর্তী ঠিকানাটি 4, তারপরে 5 মান রাখে যদি সংখ্যাটি পরবর্তী ঠিকানায় ছড়িয়ে পড়ে তবে সেই ঠিকানায় সঞ্চিত মানটি পরিবর্তন হবে না? ?
আমি অস্পষ্টভাবে এমআইপিএস অ্যাসেমব্লিতে প্রোগ্রামিং এবং এড্রেসগুলি প্রোগ্রামের সময় ধাপে ধাপে এই ঠিকানাগুলিতে নির্ধারিত মানগুলি পরিবর্তিত হতে দেখি watching
যদি না আমি ভুলভাবে মনে রাখছি তবে এখানে আরও একটি প্রশ্ন রয়েছে: যদি কোনও নির্দিষ্ট ঠিকানায় নির্ধারিত সংখ্যাটি যদি প্রকারের চেয়ে বড় হয় (মাইআরাই [2] এর মতো) তবে এটি পরবর্তী ঠিকানায় সঞ্চিত মানগুলিকে প্রভাবিত করে না?
উদাহরণ: 0x10010000 ঠিকানায় আমাদের কাছে মাইনাম = 4 বিলিয়ন। অবশ্যই মাইনিম 4 বিলিয়ন সঞ্চয় করতে পারে না তাই এটি ঠিকানায় কিছু নেতিবাচক সংখ্যা হিসাবে উপস্থিত হয়। এই বিশাল সংখ্যক সঞ্চয় করতে সক্ষম না হওয়া সত্ত্বেও 0x10010004 এর পরবর্তী ঠিকানায় সঞ্চিত মানের উপর এর কোনও প্রভাব নেই। সঠিক?
নির্দিষ্ট আকারের সংখ্যা / অক্ষর ধরে রাখার জন্য মেমোরি ঠিকানাগুলিতে কেবল পর্যাপ্ত জায়গা রয়েছে এবং যদি আকারটি সীমা ছাড়িয়ে যায় তবে এটি আলাদাভাবে উপস্থাপন করা হবে (যেমন 4 মিলিয়ন ডলার ইনট্রে সংরক্ষণ করার চেষ্টা করলেও এটি নেতিবাচক সংখ্যা হিসাবে প্রদর্শিত হবে) এবং সুতরাং এটি পরবর্তী ঠিকানায় সঞ্চিত সংখ্যা / অক্ষরগুলির উপর কোনও প্রভাব ফেলবে না।
আমি ওভারবোর্ডে গিয়ে থাকলে দুঃখিত। আমি এখান থেকে সারাদিন একটি বড় মস্তিষ্কের অভাব অনুভব করি।
int c = INT.MAXINT; c+=1;
এবং দেখুন সি এর কি হয়েছে।