1、
void f(int * p)
{
*p = 88;
}
int main(void)
{
int i;
f(&i);
printf("i=%d\n", i); // i=88
return 0;
}
2、
void f(int ** q)
{
int i = 5;
*q = &i; //ok
//**q = 5; //error
}
int main(void)
{
int * p;
f(&p);
printf("*p = %d\n", *p);
return 0;
}
因为你这个int * p没有指向任何空间啊
int * p只声明了,没有指向任何空间(NULL),所以你不能给*p赋值。
void f(int ** q)
{
int i = 5;
*q = &i; //ok
**q = 6; //error
printf("%d\n",i);
}
int main(void)
{
int * p;
f(&p);
printf("*p = %d\n", *p);
return 0;
}
这段程序的主要错误倒不是main中的p没有初始化,主要的错误是 q = &i,将p指向了f中的i;我增加了一条语句**q=6,显示i是6.返回main后,p中的地址是原来f中的i的地址,而此时i早已不存在,再显示p,就是一个随机数。但整个程序运行不报错。
供参考:
#include <stdio.h>
void f(int ** q)
{
int i = 6;
//*q = &i; //ok
**q = 5; //error
}
int main(void)
{
int * p,i;
p = &i;
f(&p);
printf("*p = %d, i = %d\n", *p, i);
system("pause");
return 0;
}