C指针分配

时间:2014-09-29 21:28:53

标签: c pointers

所以今天我正在玩一些指针,遇到了一个相当混乱的困境。我经常使用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);
}

所以我在main中创建一个指针,将它传递给一个分配空间的函数,然后将它分配给传入的指针。为什么每次运行时我都得到指针仍为空?

1 个答案:

答案 0 :(得分: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
}