در مبحث قوانين حوزه ديديد که اگر بخواهيم يک متغير محلی تابع، مقدار خود را حفظ کرده و برای دفعات بعدی فراخوانی تابع نيز نگه دارد، از کلمه static استفاده کرديم. نوع static را برای آرايه ها نيز می توان به کار برد و از همان قوانين گفته شده در مبحث مذکور پيروی می کند. به برنامه زير و خروجی آن توجه کنيد.خروجی برنامه به صورت زير می باشد :کد:#includevoid staticArrayInit( void );void automaticArrayInit( void );int main(){cout << "First call to each function:\n";staticArrayInit();automaticArrayInit();cout << "\n\nSecond call to each function:\n";staticArrayInit();automaticArrayInit();cout << endl;return 0;}// function to demonstrate a static local arrayvoid staticArrayInit( void ){// initializes elements to 0// first time function is calledstatic int array1[ 3 ]={0};cout << "\nValues on entering staticArrayInit:\n";// output contents of array1for ( int i = 0; i < 3; i++ )cout << "array1[" << i << "] = "<< array1[ i ] << " ";cout << "\nValues on exiting staticArrayInit:\n";// modify and output contents of array1for ( int j = 0; j < 3; j++ )cout << "array1[" << j << "] = "<< ( array1[ j ] += 5 ) << " ";} // end function staticArrayInit// function to demonstrate an automatic local arrayvoid automaticArrayInit( void ){// initializes elements each time function is calledint array2[ 3 ] = { 1, 2, 3 };cout << endl << endl;cout << "Values on entering automaticArrayInit:\n";// output contents of array2for ( int i = 0; i < 3; i++ )cout << "array2[" << i << "] = "<< array2[ i ] << " ";cout << "\nValues on exiting automaticArrayInit:\n";// modify and output contents of array2for ( int j = 0; j < 3; j++ )cout << "array2[" << j << "] = "<< ( array2[ j ] += 5 ) << " ";}
First call to each function:Values on entering staticArrayInit:array1[0] = 0 array1[1] = 0 array1[2] = 0Values on exiting staticArrayInit:array1[0] = 5 array1[1] = 5 array1[2] = 5Values on entering automaticArrayInit:array2[0] = 1 array2[1] = 2 array2[2] = 3Values on exiting automaticArrayInit:array2[0] = 6 array2[1] = 7 array2[2] = 8Second call to each function:Values on entering staticArrayInit:array1[0] = 5 array1[1] = 5 array1[2] = 5Values on exiting staticArrayInit:array1[0] = 10 array1[1] = 10 array1[2] = 10Values on entering automaticArrayInit:array2[0] = 1 array2[1] = 2 array2[2] = 3Values on exiting automaticArrayInit:array2[0] = 6 array2[1] = 7 array2[2] = 8
در برنامه فوق عناصر آرايه array1 در اولين بار فراخوانی تابع staticArrayInit مقدار صفر را می گيرند ولی در دفعات بعدی فراخوانی اين تابع، آخرين مقدار قبلی خود را حفظ می کنند . اما آرايه array2 در هر بار فراخوانی تابع automaticArrayInit مقدار دهی اوليه می شود و با خروج از تابع مقدار خود را از دست می دهد.
گردآورنده :طه - TAHA