В коде A, если функция tInit (test ts) вызывается для инициализации структуры, элементы не назначаются, если код tInit (test ts) не перемещен в main(). Это потому, что область ts в tInit (test ts) ограничена внутри функции?Указатель как функция Аргумент в C
В коде C, после вызова tInit (tt), tt остается NULL, что также приводит к ошибке сегментации. Какова причина?
В коде B результат - это то, что я хочу. Является ли код безопасным для памяти?
#include <stdio.h>
#include <stdlib.h>
typedef struct t {
int a;
int b;
} test;
// A
void tInit(test ts) {
ts.a = 1;
ts.b = 2;
}
int main(){
test tt;
tInit(tt);
printf("%d, %d\n", tt.a, tt.b);
return 0;
}
// B
void tInit(test **ts){
*ts = (test*)malloc(sizeof(test));
(*ts)->a = 1;
(*ts)->b = 2;
}
int main(){
test *tt = NULL;
tInit(&tt);
printf("%d, %d\n", tt->a, tt->b);
return 0;
}
// C
void tInit(test *ts){
ts = (test*)malloc(sizeof(test));
ts->a = 1;
ts->b = 2;
}
int main(){
test *tt = NULL;
tInit(tt);
printf("%d, %d\n", tt->a, tt->b);
return 0;
}
Пожалуйста, прочитайте книгу. переполнение стека не является учебным сайтом! У вас есть ** конкретная ** проблема? – Olaf
Это базовый язык программирования C, пожалуйста, прочитайте основную книгу C. –