1,指针函数
本质是函数
返回值为指针的函数
指针:指针变量,变量中存放的是地址
2,函数指针
本质是指针变量,指向函数的
数据类型 (*指针变量名)(参数列表);
数据类型:函数指针指向函数的返回值类型
参数
int (*p)(int, int) = 函数名;
int pthread_create(, ,void *(*start_routine) (void *), void *arg)
{
start_routine(arg);//handler(arg)
}
void *handler(void *arg)
{
}
pthread_create(,,handler, );
void *(*start_routine) (void *) = handler;
signal(int signum, void (*handler)(int))
signal(num, handler);
void handler(int sig)
{
/code/
}
列表:函数指针指向函数的参数列表
函数传参
值传递:将实参传递给形参,修改形参值不会影响实参值
地址传递:将实参的地址传递给形参,通过形参可以修改实参值
数组传递:本质传递地址
封装函数:
//练习:计算一串字符中某个字符的个数
void countnum(char *p, char ch)
{
int n = 0;
while(*p)
{
if(*p == ch)
n++;
p++;
}
printf("%d\n", n);
}
main()
{
int n = countnum("hello", 'l');
}
练习:字符串复制功能
void stringcpy(char *s, char *d)
{
while(*d)
{
*s = *d;
s++;
d++;
}
*s = '\0';
}
char buf[32];
stringcpy(buf, "hello");
共用体
//所有成员共用一块地址空间,按照最大的类型开辟空间
union un
{
int n;
char ch;
double dt;
};
union un my;
my.n = 100;
my.dt = 3.14;
my.ch = 'a';
结构体指针
int *p;
char *p;
float *p;
结构体:是一种构造数据类型
数据类型:
基本数据类型:short\char\int\long\float\double
构造数据类型:结构体、共用体、枚举
struct 结构名
{
成员列表;
};
struct 结构名 变量名;
struct 结构名 数组;
struct 结构名 指针;
struct student
{
char name[32];
int num;
float s;
};
struct student st = {"hello",123, 23.4};
st.num;
struct student arr[3] = {{"he",1,2}, {"we"}};
struct student *p = &st; //指针:地址,随机地址
p->num; // (*p).num
p = arr;
变量:数据类型 变量名
1. 指针本身无法存放具体数据,指针存放的是地址
2. 指针使用之前一定要初始化(给赋具体的地址)