#include <stdio.h>
void fun1(int *p)
{
*p = 1;
}
void fun2(void *p)
{
int *q = NULL;
q = (int *)p;
*q = 2;
}
void fun3(int p)
{
int *q = NULL;
q = (int *)p;
*q = 3;
}
int main(void)
{
int i = 0;
int *p = NULL;
p = &i;
printf("Before call fun* i = %d \n", i);
fun1(p);
printf("Called fun1 i = %d \n", i);
fun2((void *)p);
printf("Called fun2 i = %d \n", i);
fun3((int)p);
printf("Called fun3 i = %d \n", i);
return 0;
}
void fun1(int *p)
{
*p = 1;
}
void fun2(void *p)
{
int *q = NULL;
q = (int *)p;
*q = 2;
}
void fun3(int p)
{
int *q = NULL;
q = (int *)p;
*q = 3;
}
int main(void)
{
int i = 0;
int *p = NULL;
p = &i;
printf("Before call fun* i = %d \n", i);
fun1(p);
printf("Called fun1 i = %d \n", i);
fun2((void *)p);
printf("Called fun2 i = %d \n", i);
fun3((int)p);
printf("Called fun3 i = %d \n", i);
return 0;
}
运行结果:
./pointerTest
Before call fun* i = 0
Called fun1 i = 1
Called fun2 i = 2
Called fun3 i = 3
本文详细介绍了C语言中如何通过指针实现代理函数调用的技巧,包括不同函数参数类型和调用方式的影响。通过具体代码示例展示了fun1、fun2和fun3函数在修改整型变量i时的不同行为,最终展示了函数调用后的变量i的值变化过程。
364

被折叠的 条评论
为什么被折叠?



