勇哥注:
指针练习好了,能解决90%的驱动开发时遇到的各种问题。
#include<stdio.h>
typedef void(*p_fun)(int i, int j);
struct st {
int i;
int j;
int b;
p_fun p_fun1;
};
void fun(int i, int j) {
printf("fun%d %d\n", i, j);
}
int main()
{
struct st st_ = { 0 };
st_.i = 1;
st_.j = 2;
st_.p_fun1 = fun;
st_.p_fun1(1, 2); //fun1 2
printf("%p %p\n", st_.p_fun1, &st_.p_fun1); //00007FF668281334 000000496FF2F5A8
struct st* pst_;
pst_ = &st_;
printf("%d %d\n", st_.i, st_.j); //1 2
int* p_int = (int*)pst_;
printf("+0 %d %p\n", *p_int, p_int); // 1 0000001B7CB2F4F8
//*p_int=1;
p_int += 1;
printf("+1 %d %p\n", *p_int, p_int); //+1 2 0000001B7CB2F4FC
//*p_int=2;
p_int += 1;
*p_int = 3;
printf("+1 %d %p\n", *p_int, p_int); //+1 3 0000001B7CB2F500
p_int += 1;
printf("+1 %d %p\n", *p_int, p_int); //+1 0 0000001B7CB2F504
p_int += 1;
printf("+1 %p %p %p\n", *p_int, p_int, *(long long int*)p_int); //+1 0000000068281334 000000496FF2F5A8 00007FF668281334
p_fun p =(p_fun)(*(long long int*)p_int);
printf("%p\n",p); //00007FF65AF91334
p(1, 2); //fun1 2
(*(p_fun*)p_int)(2, 3); //fun2 3
printf("%lld\n", sizeof(struct st)); //24
return 0;
}