Как сделать для возврата в main с указателем на указатель на указатель? - PullRequest
0 голосов
/ 10 октября 2019
void    ft_destroy(char ***factory);

int     main()
{
    char name[] = "sebastian";
    char *pt1 = &name;
    char **pt2 = &pt1;
    char ***pt3 = &pt2;
    printf("%s", ft_destroy(pt3));
    return (0);
}
error: incompatible pointer types initializing 'char *' with an expression of type 'char (*)[10]'
      [-Werror,-Wincompatible-pointer-types]
        char *pt1 = &name;

Ответы [ 2 ]

1 голос
/ 10 октября 2019
char *pt1 = &name;

&name - это адрес типа char[10], для хранения которого требуется char (*pt1)[10].

Возможно, вы можете сделать, как показано ниже.

char *pt1 = &name[0]; //or char *pt1 = name;

в этом случае&name[0] имеет тип char *.

1 голос
/ 10 октября 2019

name - это массив из 10 char, который является char [10]. Таким образом, &name является указателем на массив char, который является char (*)[10]. Поскольку pt1 - это char *, вам следует присвоить ему указатель на char.

Поскольку name - это массив char, name[0] - это char,&name[0] - указатель на char. Таким образом, вы можете сделать char *pt1 = &name[0];.

Если вы просто используете name, C автоматически преобразует его в указатель на свой первый элемент, поэтому вы также можете сделать char *ptr1 = name;.

...