যদি arrayসত্যই অ্যারে হয় তবে আপনি এটি দিয়ে "এটি শূন্য" করতে পারেন:
memset(array, 0, sizeof array);
তবে দুটি বিষয় রয়েছে যা আপনার জানা উচিত:
- এটি কেবল তখনই কাজ করে যদি
arrayসত্যিই "দুই-ডি অ্যারে" হয়, অর্থাত্ T array[M][N];কোনও ধরণের জন্য ঘোষিত হয়েছিল T।
- এটি কেবলমাত্র যেখানে
arrayঘোষিত হয়েছিল সেই সুযোগে কাজ করে । যদি আপনি এটি কোনও ফাংশনে পাস করেন, তবে নামটি array একটি পয়েন্টারের কাছে যায় এবং sizeofআপনাকে অ্যারের আকার দেয় না।
আসুন একটি পরীক্ষা করা যাক:
#include <stdio.h>
void f(int (*arr)[5])
{
printf("f: sizeof arr: %zu\n", sizeof arr);
printf("f: sizeof arr[0]: %zu\n", sizeof arr[0]);
printf("f: sizeof arr[0][0]: %zu\n", sizeof arr[0][0]);
}
int main(void)
{
int arr[10][5];
printf("main: sizeof arr: %zu\n", sizeof arr);
printf("main: sizeof arr[0]: %zu\n", sizeof arr[0]);
printf("main: sizeof arr[0][0]: %zu\n\n", sizeof arr[0][0]);
f(arr);
return 0;
}
আমার মেশিনে, উপরের প্রিন্টগুলি:
main: sizeof arr: 200
main: sizeof arr[0]: 20
main: sizeof arr[0][0]: 4
f: sizeof arr: 8
f: sizeof arr[0]: 20
f: sizeof arr[0][0]: 4
যদিও arrএটি একটি অ্যারে, এটি পাস করার সময় এটি তার প্রথম উপাদানটির দিকে একটি পয়েন্টারকে স্থির করে f()এবং তাই মুদ্রিত আকারগুলি f()"ভুল" হয়। এছাড়াও, f()আকারে arr[0]অ্যারের আকার হয় arr[0]যা একটি "অ্যারে [5] int"। এটি int *কোনওটির আকার নয় , কারণ "ক্ষয়" কেবলমাত্র প্রথম স্তরে ঘটে এবং এজন্য আমাদের f()সঠিক আকারের অ্যারেতে পয়েন্টার গ্রহণ হিসাবে ঘোষণা করতে হবে।
সুতরাং, যেমনটি আমি বলেছিলাম, আপনি মূলত যা করছিলেন তা কেবল তখনই কাজ করবে যদি উপরের দুটি শর্তটি সন্তুষ্ট হয়। যদি তা না হয় তবে আপনার অন্যরা যা বলেছে তা করা দরকার:
memset(array, 0, m*n*sizeof array[0][0]);
শেষ অবধি, memset()এবং forআপনার পোস্ট করা লুপটি কঠোর অর্থে সমান নয়। সংকলকগুলি (এবং থাকতে পারে) থাকতে পারে যেখানে নির্দিষ্ট ধরণের যেমন পয়েন্টার এবং ভাসমান-পয়েন্ট মানগুলির জন্য "সমস্ত বিট শূন্য" সমান হয় না। আমি সন্দেহ করি যে আপনি যদিও এটি সম্পর্কে চিন্তা করা প্রয়োজন।