انگیزهی من از نوشتن این مطلب مواردی بود که گاهی مشاهده میکردم فرد با وجود سالها تجربه این نکات را نمیداند و با فرض اشتباه کد میزند.
اگر میخواهید کل آرایه را با صفر پر کنید، کافی است، یکی از دو راه زیر را انتخاب کنید:
int numbers[5] = {};
یا
int numbers[5] = {0};
اما در نظر داشته باشید با انجام چنین کاری:
int numbers[5] = {1};
آرایهی ما با یک پر نخواهد شد. بلکه تنها عضو اول(اندیس صفر) آن یک میشود و سایر اعضا با صفر مقدار دهی میشوند.
در اینجا سه عضو اول این مقادیر غیر صفر را میگیرند و سایر اعضا به طور خودکار صفر خواهند شد:
int numbers[5] = {1, 2, 3};
اگر بخواهید تنها عضو با اندیس 3 و 4 را مقدار غیر صفر دهید و بقیه را صفر کنید:
int numbers[5] = {[3] = 5, [4] = 6};
اگر قصد دارید کل اعضا را با مقداری غیر صفر مقدار دهی کنید، یا باید از list initializer به تک تک اعضا مقدار دهید:
int numbers[5] = {7, 7, 7, 7, 7};
یا در کد به کمک حلقهی for اینکار را انجام دهید.
ما میتوانیم با list initializer حتا سایز آرایه را هم برایش مشخص کنیم. مثلاً
int numbers[] = {7, 7, 7};
در اینجا آرایه ما سایزش به اندازهی 3 المان خواهد بود و اگر به این نکته دقت نکنید ممکن است باعث خرابکاری در برنامه شوید.
نکاتی که در بالا اشاره کردم، وابسته به کامپایلر خاصی نیست و استاندارد است. روش زیر که تنها برای کامپایلر GCC قابل تعریف است باعث میشود کد شما غیر استاندارد شود و به شخصه اصلاً اینکار را توصیه نمیکنم:
int numbers[] = {[0 . . . 4 ] = 3};
اگر موردی را از قلم انداختم، خوشحال میشوم زیر این مطلب بنویسید.