Search code examples
cargumentsprogram-entry-pointfreevoid

How to do for return in main with pointer to pointer to pointer?


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;

Solution

  • name is an array of 10 char, which is a char [10]. So &name is a pointer to an array of char, which is a char (*)[10]. Since pt1 is a char *, you should assign to it a pointer to a char.

    Since name is an array of char, name[0] is a char, and &name[0] is a pointer to a char. So you can do char *pt1 = &name[0];.

    If you just use name, C will automatically convert it to a pointer to its first element, so you can also do char *ptr1 = name;.