2017-11-23 1 views
0

함수를 호출 할 때 포인터를 사용하는 방법, 그내가이 structrure이 C로 프로그래밍을 몇 가지 문제가

typedef struct Hash_Funct{ 
char* name;    
Var_Table * List_of_Variables; ///pointer to list of variables 
} Hash_Funct; 

같은 간다 그리고 코드의 특정 시점에, 나는과 구조를 inicialize하려면 :

Init_ID_Table(); Init_ID_Table()가 어떤 지금 사이즈 크기의 테이블에 가리키고 모든해야하는합니다 (* List_of_Variables 포인터에 영향을 줄 것으로 보인다 그것은 나던이 코드의 끝 부분에서,

void Init_ID_Table(Var_Table *table){ 
    table = (Var_Table*) malloc (sizeof(Var_Table)); 
    for(int i=0; i< SIZE;i++){ 
     (*table)[i] = NULL; 
    } 
} 

그러나 :로 정의된다 그 요소는 NULL로 설정된다). 아무도 적어도 예상대로 작동하도록 변경하지 않을 경우 어떤 일이 벌어지고 있는지 말해 줄 수 있습니까?

+1

[malloc을 캐스팅하지 않습니다 (https://stackoverflow.com/questions/605845/do-i-cast-the-result :

void Init_ID_Table(Var_Table **table) { Var_Table *temp_table = malloc (sizeof(Var_Table)); for (int i = 0; i < SIZE; i++) { temp_table[i] = NULL; } *table = temp_table; } 

그런 다음 당신은이 방법을 부를 것이다 -of-malloc) – Barmar

+0

C 언어는 상위 레벨 언어의 경우와 같이 매개 변수를 참조로 전달하지 않습니다. – tilz0R

답변

1

변수가 함수의 매개 변수에 할당 값에 의해 전달 호출자의 변수에 영향을주지 않습니다, 당신에게 아담를 대단히 감사합니다.

구조체 멤버에 대한 포인터를 전달하고이를 통해 호출자의 변수를 수정해야합니다.

Init_ID_Table(&(tmp->List_Of_Variables)); 
관련 문제