Помогите,пжлста, разобрать данный код, конкретно инетересует часть кода с указателями и индексами, объясните пожалуйста, подробней
заранее спасибо
Код:
//pods4et koli4estva stolbcov s raznimi elementami
#include <stdio.h>//standartnij vvod/vivod
#include <stdlib.h>//videlenie pamjati,kontrolj processa vipolnenija programmi, preobrazovanie tipov
#include <time.h>//soderwit funkcii dlja raboti so vremenem
int** mat_alloc(const int, const int);
void mat_free(int**, const int);
int mat_unique_index(int**, const int, const int);
int mat_unique_ptr(int**, const int, const int);
int main()//na4alo glavnoj funkcii
{
int r, c1, rows = 5, // 7
cols = 10; // 11
int** mat;
if((mat = mat_alloc(rows, cols)) == NULL)
return 1;
// zapolnenie matrici slu4ajnimi 4islami
srand(time(NULL));//ustanavlivaet v ka4estve bazi tekuwee vremja(ispoljzuetsja, 4tobi pri zapuske generetora slu4ajnih 4isel, bila vzjata raznaja baza)
for(r = 0; r < rows; r++) {
for(c1 = 0; c1 < cols; c1++)
mat[r][c1] = 10 + rand() % 20; //formula dlja mawtabirovanija i sdviga slu4ajnih 4isel:10-zna4enie smewenija,koefficient mawtabirovanija
}
// pods4et stolbcov s nepovtorrjajuwimi elementami(indeksacija)
printf("count index unique columns: %d\n", mat_unique_index(mat, rows, cols));
// pods4et stolbcov s nepovtorjajuwimi elementami(pri pomowi ukazatelej)
printf("count ptr unique columns: %d\n", mat_unique_ptr(mat, rows, cols));
// dlja rezuljtirujuwego primera vivesti v konsolj
for(r = 0; r < rows; r++) {
for(c1 = 0; c1 < cols; c1++)
printf("%d ", mat[r][c1]);
putchar('\n');//funkcija za odno obrawenie k nej, vidaet 1 simvol v standartnij vihodnoj potok
}
// v konce nuwno osvobodij pamjatj zanimaemoj matricej
mat_free(mat, rows);
getchar();//funkcija, kotoraja 4itaet 1 simvol, vvedenij s klaviaturi
return 0;//pokazivaet uspewnoe zaverwenie programmi
}
// pods4et stolbcov(indeksi)
int mat_unique_index(int** mat, const int rows, const int cols) {
int ts, ir, r, c1, cnt = 0;
for(c1 = 0; c1 < cols; c1++) {
for(r = 0; r < rows; r++) {
for(ts = 0, ir = 0; ir < rows; ir++) { (ts-? ir-?)
if(mat[r][c1] == mat[ir][c1]) { (c1-? что делает эта строчка?)
if(++ts > 1) (????)
goto _abort;
}
}
}
cnt++;
_abort: ;
}
return cnt;
}
// pods4et stolbcov (ukazateli) (с указателями вообще не понятно,нужны комментарии к каждой строке)
int mat_unique_ptr(int** mat, const int rows, const int cols) {
int c = 0, ts, cnt = 0;
int **aptr, **bptr, *a, *b; (переменные не понятны)
for(c = 0; c < cols; c++) {
for(aptr = mat; aptr != mat + rows; ++aptr) {
a = *aptr + c;
for(ts = 0, bptr = mat; bptr != mat + rows; ++bptr) {
b = *bptr + c;
if( *b == *a ) {
if(++ts > 1)
goto _abort;
}
}
}
cnt++;
_abort: ;
}
return cnt;
}
// videlenie pamjati dlja matric
int** mat_alloc(const int rows, const int cols) {
int r;
int** mat = (int**) malloc(sizeof(int)*rows);
if(mat == NULL)
return NULL;
for(r = 0; r < rows; r++)
*((mat)+r) = (int*) malloc(sizeof(int)*cols);
return mat;
}
// videlenie pamjati dlja matric
void mat_free(int** mat, const int rows) {
int r;
for(r = 0; r < rows; r++) {
free( *((mat)+r) );
*((mat)+r) = NULL;
}
free(mat);
mat = NULL;
}