В головной программе матрица должна быть описана с фиксированной размерностью с 10 столбцами.
Else
Динамические массивы при создании нельзя инициализировать, и они не обнуляются при создании.
Треугольные динамические матрицы
 Выделение памяти под верхний треугольник квадратной матрицы nхn:
int **p;
p = new int *[n];
for (int i=0; i<n; i++)
p[i] = new int [n-i];
 Выделение памяти под нижний треугольник такой же матрицы:
int **p;
p = new int *[n];
for (int i=0; i<n; i++)
p[i] = new int [i+1];
Пример 10.6. Динамическая единичная матрица (вариант1).
 include <iostream.h>
 void main ()
 {int i, j, n;
 cout << "Enter n"; cin >> n;
int **matr;
matr= new int *[n];
 //массив указателей
 if (matr == NULL)
{cout <<"Error"; return;}
 for (i=0;i<n;i++)
matr[i]= new int [n];
 for (i=0;i<n;i++)
 for (j=0;j<n;j++)
 if (i != j)
 *(*(matr+i)+j) =0;
 else
 *(*(matr+i)+j) =1; 
 for (i=0;i<n;i++)
 { 
 cout << endl;
 for (int j=0;j<n;j++)
 cout<<*(*(matr+i)+j)<<' '; } 
 for (i=0;i<n;i++)
 delete *(matr+i);
delete [] matr;
 }
Пример 10.7. Динамическая единичная матрица (вариант2). 
 int i,j,n;
 cout << ”N“;
 cin >> n;
 float **matr;
 matr= (float**)malloc(n*4); 
 if (matr == NULL) 
 {cout <<”error”; return;}
 for (i=0;i<n;i++)
 matr[i] =(float*)malloc(n*sizeof (float));
 for (i=0;i<n;i++)
 for (j=0;j<n;j++)
 if (i != j)
 *(*(matr+i)+j) =0;
 else 
 *(*(matr+i)+j) =1;
 for (i=0;i<n;i++)
 { cout << endl;
 for (int j=0;j<n;j++)
 cout << *(*(matr+i)+j) << ' ';
 } 
 for (i=0;i<n;i++)
 free(*(matr+i));
 free(matr);
 cout << endl;
}
Одномерные массивы – параметры 
 Формальный параметр массив можно объявить тремя способами: 
 · массив с фиксированной длиной;
 · безразмерный массив;
 · указатель, тип которого будет совпадать с типом элементов массива.
 При вызове функции, параметром которой является массив, в качестве фактического параметра указывается имя массива без индексов.
Пример 10.8. Нахождение суммы элементов массива.
int sum1(int a[100], int n)
 {
 for (int i=0, int s=0; i<n-1;
 s += a[i++]); 
 return s;
 }
int sum2(int a[], int n)
 {
 int s=0; 
 for (int i=-1;i<n-1;s+=a[++i]);
 return s;
 }
int sum3(int *a, int n)
 {
 int s=0; 
 for (int i=-1;i<n-1;s+=a[++i]);
 return s;
 }
int main()
 {int a[30], *b,
 c[]={1,22,35,4,5,7,9,6,44,55,100};
 int r, n;
 srand(time(0));
 n=rand()%29+1; //размер<30
 b=new int[n];
 for (int i=0; i<n; i++)
 {a[i] = rand()%100;
 b[i] = rand()%10;} 
 r1= sum1(a,n); 
 r2= sum2(c,sizeof(c)/sizeof(int));
 r3= sum3(b,n); 
 }
Функции, возвращающие указатель на массив
Пример 10.9. Слияние двух упорядоченных массивов
#include <iostream>
using namespace std;
int* fun(int n, int* a, int m, int* b)
{ int* x=new int[n+m];
//массив-результат
int ia=0,ib=0,ix=0;
while ((ia<n)&&(ib<m))
//цикл до конца одного из массивов
if (a[ia]>b[ib])
x[ix++]=b[ib++];
else x[ix++]=a[ia++];
if (ia>=n)
while(ib<m)
x[ix++]=b[ib++];
while(ia<n)
x[ix++]=a[ia++];
return x;
}
void main()
{setlocale(LC_ALL,".1251");
int p[]={3,7,8,55};
int s[]={1,4,6,9,23,34};
int* h;//указатель на массив-результат
int kp=sizeof(p)/sizeof(p[0]);
int ks=sizeof(s)/sizeof(s[0]);
h=fun(kp,p,ks,s);
cout<<"результат"<<endl;
for(int i=0;i<kp+ks;i++)
cout << " " << h[i];
cout<<endl;
delete[]h;
}
Двумерные массивы – параметры
Двумерный массив как формальный параметр можно объявить следующими способами: 
 1.Двумерный массив с фиксированной длиной;
 2.Двумерный массив с фиксированной размерностью первого измерения, т.е. второй размерностью (количество столбцов);
 3.Указатель, которому при вызове будет соответствовать адрес первого элемента двумерного массива;
 4. Массив указателей на массивы строк;
 5.Динамический двумерный массив.
Прототипы соответствующих функций будут иметь следующий вид: 
1)int f1(int ma[20][30]);
 2)int f21(int ma[][30], int n);
или
 int f22(int ma[][30],int n, int m); 
 3)int f3(int *ma, int n, int m);
 4)int f4(int *ma[],int n,int m); 
 5)int f5(int **ma, int n,int m);
Варианты I-II.
Пример 10.10. Функция транспонирования квадратной матрицы (варианты 1-2).
void transpon(int Ma[10][10],int n)
//void transpon(int Ma[][10],int n)
{int r;
for (int i=0; i<n-1; i++)
for (int j=i+1; j<n; j++)
{
r=Ma[i][j];
Ma[i][j]=Ma[j][i];
Ma[j][i]=r;
}
}
int main()
{int Matr[10][10];
int k;
cin >> k;
for (int i=0; i<k; i++)
for (int j=0; j<k; j++)
Matr[i][j]=rand()%10;
for (int i=0; i<k; i++)
{for (int j=0; j<k; j++)
cout << Matr[i][j] << " ";
cout << endl;
}
transpon(Matr,k);
cout << ”---------------\n”;
for (int i=0; i<k; i++)
{for (int j=0; j<k; j++)
cout << Matr[i][j] << " ";
cout << endl;
}
return 0;
}