تا جایی که من میدونم این کار شدنی نیست
آرایه یا ابعادش ثابته که میتونی همونطور که خودتون نوشتین، تعریفش کنین البته این روش هم یه محدودیت داره. شما نمیتونی به هر اندازه دلخواه از حافظه بگیری چون در این روش از حافظه پشته استفاده می کنی که محدودیت داره.
مورد دوم اینه که ابعاد آرایه متغیر باشه که شما باید از malloc استفاده کنی. malloc اشاره گر نیست بلکه مکانیزمی برای گرفتن حافظه از heap هست.
اگر ابعاد آرایه در زمان کامپایل مشخصه از این روش میتونید استفاده کنید:
#define ROWS ...
#define COLS ...
int (*arr)[COLS] = malloc(sizeof *arr * ROWS);
if (arr)
}
do stuff with arr[i][j] //
free(arr)
{
}اگر ابعاد آرایه در زمان کامپایل مشخص نباشه و شما از کامپایلر C99 و C2011 استفاده میکنید، از این روش استفاده کنید size_t rows, cols;
assign rows and cols//
int (*arr)[cols] = malloc(sizeof *arr * rows);
if (arr)
}
do stuff with arr[i][j]//
free(arr);
{
اگر ابعاد آرایه در زمان کامپایل مشخص نباشه و شما از کامپایلر C99 و C2011 استفاده نمیکنید، از این روش استفاده کنید
size_t rows, cols;
// assign rows and cols
int *arr = malloc(sizeof *arr * rows * cols);
{
// do stuff with arr[i * rows + j]
free(arr);
}