C语言基础回顾(长期更新):指针,线程

函数指针##

在结构体里面定义函数指针func,然后在main里面给这个指针赋值为add函数

#include   
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 
 
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]<

指针的指针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当前对象。

你可能感兴趣的:(C语言基础回顾(长期更新):指针,线程)