двойной ** int параметр функции - PullRequest
0 голосов
/ 14 декабря 2018

Может кто-нибудь объяснить мне, почему параметр имеет двойное «**»?Мол, я знаю, что это эквивалент «по ссылке» в C ++, но мне нужно больше объяснений, пожалуйста.

 int crearevect(int **v)
{
    int nr,i;
    scanf("%d",&nr);
    *v=(int *)(malloc(nr*sizeof(int)));
    for (i=0; i<nr; i++)
        printf("%p ",((*v)+i));
    printf("%p",v);
    return nr;
}
// v[i] = *(v+i)
// *(v)[i] = *(*(v)+i)



void creareMATRICE(int ***a, int *n, int *m)
{
    scanf("%d",n);
    scanf("%d",m);
    *a=(int **)(malloc(*n*sizeof(int)));
    int i,j;
    for (i=0; i<*n; i++)
        (*a)[i]=(int *)(malloc(*m*sizeof(int)));
    for (i=0; i<*n; i++)
        for (j=0; j<*m; j++)
            scanf("%d",&(*a)[i][j]);
    return;
}

1 Ответ

0 голосов
/ 14 декабря 2018
  • в C относится к указателю.* Обозначает переменную, которая содержит адрес памяти, аналогично ** относится к переменной, которая содержит адрес памяти адреса памяти, аналогично *** и так далее.Вы можете прочитать больше об указателях из https://www.tutorialspoint.com/cprogramming/c_pointers.htm или любой другой онлайн-ссылки.Но в общем случае вы можете связать * с переменной, которая может использоваться для адресации одномерного массива (v [i] = * (v + i)), ** с переменной, которая может использоваться для адресации двумерного массива (v [i] [j] = ( (v + i) + j)) и т. д.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...