由于各种原因(局部变量函数结束会释放,static 的函数在其他文件访问不到等)可能你操作不了你想要操作的那块内存,
但是通过指针(即知道了地址)就可以想怎么操作就怎么操作。
例如:
1、通过形参(b)修改实参(a)的值。直接传值给形参(b)的话,是值的拷贝,就是b的值和a的值一样,然后函数中实际操作的是b,
不会影响到a。但是如果把a的地址(指针)传进去,那b的值是a的地址,操作b就相当于去找到a然后再操作。
2、static函数外部文件访问不了。只要在外部文件中知道这个函数的地址,就可以访问了。
文件a.c如下:
#include
int (*x)(); //定义一个指针x,指向返回值是int型的参数为空的函数
static int aaa()
{
printf("hahahaha
");
}
int bbb()
{
printf("addr of aaa is %p
",aaa);
x = aaa; //保存static函数aaa的地址
}
文件b.c如下:
#include
extern int (*x)();
extern int bbb();
int main(int argc,char**argv)
{
bbb();
printf("addr of x is %p
",x);
x(); //通过地址调用 aaa函数,这里叫x函数,不过他们是一样的,因为地址一样
}
编译:gcc a.c b.c -o out
运行:./out