Во-первых, в c вы передаете параметры только по значению, что означает
char *t1 = NULL;
Test1(t1);
вы передаете копию указателя t1
в функцию Test1, поэтому изменение этой копии не повлияет на исходную. Поэтому, когда вы попытаетесь напечатать строку t1
points, это будет значение NULL, которое вы инициализировали ранее.
Теперь вот этот:
char *t4 = NULL;
t4 = Test4(t4);
хотя вы также передаете копию из t4
, функция Test4 фактически выделяет вам память и заставляет эту копию из t4
указать эту память, а затем вы получаете эта копия, вы получите ту память, выделенную для вас:)
На самом деле для Test4 вам не нужно передавать аргумент, просто создайте указатель в Test4 и верните его, вы получите копию указателя, которая указывает на нужную вам память.
Как это:
char * Test4()
{
char *t = (char *)malloc(11 * sizeof(char));
strcpy(t, "1234567890");
return t;
}
Надеюсь, это поможет.