2014-09-29 135 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); 
} 

所以我创建的主要指针,它传递到其分配空间的函数,然后分配回传入的指针。为什么说每次我运行此我得到的指针仍然是空?

+2

,所以'INT ** numero'然后'* NUMERO = newNum;'和'SUBR (&number);'或简化对指针的引用,所以只是'int *&numero'并且没有更多的变化 – 2014-09-29 21:29:50

+0

第2行中没有自由的,未定义的行为等 – deviantfan 2014-09-29 21:30:01

+0

而且你的指针是纯粹的机会NULL。 – juanchopanza 2014-09-29 21:30:15

回答

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,所以习惯于在函数ptrs中传递我自动认为它是传入的ptr地址。谢谢,愚蠢的疏忽! – PandaRaid 2014-09-29 21:42:24