Увод в програмирането  alpha
Формални параметри и масиви

До тук можем да подаваме масиви на функци по следния начин:

        void f(int i, int a[] )
        {
                // Some code goes in here.....
        }
        
        void main()
        {
                int k, array[10];
                // more code goes in here....
                
                f(k, array);
                // this is also some code ....
        }

Разглеждането на масив като указател при предаването му към функция разкрива някои нови възможности.

Например във функцията да се подаде част от масива, т.е. да се подаде подмасив:

        void f1(int i, int *p )
        {
                // Some code goes in here.....
        }
        
        void main()
        {
                int k, array[10];
                // more code goes in here....
                
                f1(k, array[4);
                // еквивалентно на:
                f1(k, array + 4 );
                // Предава като указател в f1 подмасив на array като започва от 5тия елемент на масива.
                
                // this is also some code ....
        }

В f1 можем да работим с подмасив по съшия начин, по които бихме работили и с цял масив.

Нека разгледаме двумерен масив:

        int  arr[5][10];

В C/C++ двумерните масиви всъщност се разглеждат като едномерен масив, чиито елементи са едномерни масиви ( по-точно указател към едномерен масив ).

Следователно arr и arr[i] са масиви.

arr[i][j] е елемент на двумерния масив.

arr[i] е указател към едномерен масив и като такъв може да се предаде във функция по вече познатия начин.

Примерна програма:

        #include < ctype.h>
        #define ROW 100
        #define COL 200
        
        void trans( char *p );
        
        void main()
        {
                char str[ROW][COL];
                int i;
                .........
                
                for ( i = 0; i < ROW; i++ )
                        trans(str[i]);
                .......
        }
        
        void trans ( char *p)
        {
                for( ; *p != '\0' ; p++ )
                        *p = tolower(*p);
        }