2014-09-29 7 views
0

그래서 오늘 포인터로 놀고 있었고 다소 혼란스러운 곤경에 처했습니다. 나는 C를 많이 사용하지만 이것이 왜 그 당시에는 효과가 없었는지 알 수 없었다.C 포인터 할당

#include <stdio.h> 
#include <stdlib.h> 

void subr(int* numero){ 
    int* newNum = malloc(sizeof(int)); 
    (*newNum) = 5; 
    numero = newNum; 
    printf("%d\n", *numero); 
} 

int main(){ 
    int* number; 
    printf("%p\n", (void *) number); 

    subr(number); 
    if(number == NULL) 
     printf("Not assigned\n"); 
    else 
     printf("%d\n", *number); 
} 

그래서 나는 공간을 할당하는 함수에 전달할 주에있는 포인터를 만든 다음 다시 전달 된 포인터에 할당합니다. 왜 내가 포인터가 여전히 null 인 것을 얻을 내가 이것을 실행하는 것이 매번입니다 ?

+2

다음 INT ** numero'와'* NUMERO = newNum'너무;'와'SUBR (& 번호); 또는 포인터에 대한 참조가 더 간단하므로'int * & numero' 만 변경하면됩니다. –

+0

메인 등의 2 행에서 정의되지 않은 동작이 없습니다. – deviantfan

+0

포인터가 순수한 기회로 NULL이됩니다. – juanchopanza

답변

4

이 코드가 작동하지 않는 이유는 C가 값별로 전달되는 언어이기 때문입니다. 당신은 아무것도를 수정하려는 경우, 당신은 포인터를 통과해야 : 당신이 포인터 포인터가 필요 귀하의 경우

void subr(int** numero){ 
    int* newNum = malloc(sizeof(int)); 
    (*newNum) = 5; 
    *numero = newNum; 
    printf("%d\n", **numero); 
} 

int main(){ 
    int* number = NULL; // <<== Need to initialize it 
    printf("%p\n", (void *) number); 

    subr(&number); 
    if(number == NULL) 
     printf("Not assigned\n"); 
    else 
     printf("%d\n", *number); 
    free(number); // <<== Don't forget to free what's malloc-ed 
} 
+0

Gah가 있었으므로 자동으로 ptr 주소가 전달되었다고 생각했던 함수 ptrs를 전달하는 데 사용되었습니다. 감사합니다. 바보 같은 감독입니다! – PandaRaid