所以今天我正在玩一些指针,遇到了一个相当混乱的困境。我经常使用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中创建一个指针,将它传递给一个分配空间的函数,然后将它分配给传入的指针。为什么每次运行时我都得到指针仍为空?
答案 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
}