我试图了解动态内存如何在C中工作。假设我需要使用另一个函数为某些指针分配内存。可能吗?我试过下面的程序,但它在Windows中一直崩溃。
void foo(int** x){
*x=(int *)malloc(10*sizeof(int));
int i;
for(i=0; i<10; i++){
*x[i] = 0;
}
}
int main(int argc, char* argv[]){
int *x;
int i;
foo(&x);
for(i=0; i<10; i++){
printf("%d\n",x[i]);
}
return 0;
}
答案 0 :(得分:3)
问题出在这条线上。
*x[i] = 0;
在指针取消引用中添加括号。
(*x)[i] = 0;
这是因为x [i]实际上意味着*(x + i)。也就是说,将i添加到指针x以获取新指针并获取该内存位置的值。
现在请记住,x是指向指针的指针。当你想要*x[i]
时,**(x+i)
可以更容易被理解为*((*x)+i)
。
可能需要一些思考才能解决问题,但一旦掌握了它,指针很容易。