|
比如我写一段代码如下:
void assign(int* a)
{
int* p;
p=(int*)malloc(sizeof(int));
*p=12;
a=p;
}
int main()
{
int *a=NULL;
assign(a);
printf("%d",*a);
}
为什么不能如此赋值?
昨天确实有点犯傻了,看到大家这么热情,还是得谢谢大家。
gvlr的程序是正确的,Lolita的解答也很耐心详细,ooio_karl和mech的一样,容易导致段错误。
c语言的指针里面的内容就是一个地址值而已。参数为指针时,传递的是这个地址的一个拷贝。因此,这个指针的内容(地址值)是不会变的,但是可以在子函数里改变他所指的地址的内容,相当于汇编的间接寻址;要想在子函数里改变指针,只能传递指向指针的指针。
其实,我是在一个链表程序里犯下这样的错误的:将链表的头指针传到一个子函数中去,我在子函数中改了链表的头指针,以为链表会发生变化,在主函数里发现没有任何效果,正确做法和gvlr一样,应该传递指向链表结构体的指针的指针。 |
|