函数指针##
在结构体里面定义函数指针func,然后在main里面给这个指针赋值为add函数
#include <stdio.h>
struct DEMO
{
int x,y;
int (*func)(int,int); //函数指针
};
int add1(int x,int y)
{
return x*y;
}
int add2(int x,int y)
{
return x+y;
}
int main()
{
struct DEMO demo;
//demo.func=add2; //结构体函数指针赋值
demo.func=&add2; //结构体函数指针赋值
printf("func(3,4)=%d\n",demo.func(3,4));
demo.func=add1;
printf("func(3,4)=%d\n",demo.func(3,4));
return 0;
}
typedef void (*init_func_type)(struct fm_cbk_tbl *);
上面这句看了我好久,是啥意思?看来C语言很久没用了,都TM快忘光了。上面这句就是定义一个函数指针init_func_type,输入为结构体fm_cbk_tbl ,返回值为空。啧啧
指针数组与数组指针##
int* a[4] 指针数组
int (a)[4] 数组指针
上面说明[]的优先级大于
#include <iostream>
using namespace std;
int main()
{
int c[4]={1,2,3,4};
int *a[4]; //指针数组
int (*b)[4]; //数组指针
b=&c;
//将数组c中元素赋给数组a
for(int i=0;i<4;i++)
{
a[i]=&c[i];
}
//输出看下结果
cout<<*a[1]<<endl; //输出2就对
cout<<(*b)[2]<<endl; //输出3就对
return 0;
}
指针的指针char**##
int do_powerctl(int nargs, char **args)
{
....
res = expand_props(command, args[1], sizeof(command));
return android_reboot(cmd, 0, reboot_target);
.....
}
上面是android设置sys.powerctl属性会跑进去的函数,我火眼金睛一看,这个输入是
char**args
好鬼复杂。
查阅了一下资料,我是这样理解的。
char * 常常用来表示字符串,例如 char * a="hello";
看看上面函数的应用,args[1],说明args是个数组啦。所以args这个数据应该是类似如下这样子的
{"hello","you"}
所以args可以这样定义
char ** args={"hello","you"}
或者
char * args[2]={"hello","you"}
多线程##
pthread_create函数有四个参数,第一个为线程指针,第二个为属性,第三个为起始函数,第四个为参数
int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,
(void*)(*start_rtn)(void*),void *arg)
下面是一个例子
pthread_create(&m_thread, NULL, ThreadProc, this);
所以会跑到ThreadProc函数执行,输入为this当前对象。