C语言中使用函数进行指针变量的地址传递
函数原型
AxisCB
是一个数组,函数作用是将AxisCB[axisIndex].func.PLSR
的地址保存到指针变量plsrFunc
中,从而能通过plsrFunc
直接拿到地址中的值,隔离了AxisCB
数组,达到了函数接口的使用目的而不用给别人其他文件
/* 函数的定义 */
MCStructAxisCB AxisCB[MAX];
typedef struct
{
int a;
int b;
}MCStructAxisFunc;
typedef struct {
MCStructAxisFunc func;
}AxisCB
/* 第一种方法 */
void getfuncAddr1(INT16U index,void* func)
{
func = &AxisCB[index].func
}
/* 第二种方法:二级指针,指针的地址 */
void getfuncAddr2(INT16U index,MCStructAxisFunc** func)
{
MCStructAxisCB* pAxis = AxisCB + index;
*func = &(pAxis->func)
}
INT8U index = 0;
/* 函数的调用 */
MCStructAxisFunc* pfunc = NULL; //临时变量pfunc
/* 通过函数接口拿到AxisCB数组中的func地址放到pfunc中去 */
void getfuncAddr1(index,pfunc); //第一种方法,错误,没拿到地址
void getfuncAddr2(index,&pfunc); //第二种方法,正确,传址调用
两种方法比较
很显然,第二种方法正确,既然想要使用指针变量,那么就需要得到指针的地址,即函数形参需要(数据类型*)*
(数据类型*)
代表这是一个指针,(数据类型*)*
代表取指针的地址,这样就可以拿到指针的地址,从而得到指针(通过函数内部的解引用操作),得到指针后,便可以对指定的内存进行操作了
注意点
1.首先是需要传二级指针
2.参数传入的时候需要加&
,这样才能拿到指针的地址
3.函数内部需要对指针的地址进行解引用才能拿到指针的值