函数指针与block[通俗易懂]

2022-07-29 18:01:32 浏览数 (2)

#1. 给普通的指针赋值

代码语言:javascript复制
int projectCount = 1;
int *intPtr = &projectCount;

#2. 函数的名称就是函数的地址

代码语言:javascript复制
int func(int count)
{
return count * 2;
}
int (*funcPtr)(int) = func;

#3. 函数的参数是: 指向函数的指针

代码语言:javascript复制
typedef int (*blk_c)(int);

// 3.1 直接方式
int func_para_c (int (*blk_c)(int))
{
  return 3;
}

// 3.1 间接方式
int func_para_c_d (blk_c blk)
{
  return 3;
}

#4. 函数的参数是: block

代码语言:javascript复制
 typedef int (^blk_t)(int); // 定义block变量

// 4.1 直接方式
int func1(int (^blk)(int))
{
    return 3;
}

// 4.1 间接方式
int func11(blk_t blk)
{
    return 3;
}

#5. 函数的返回值是: 指向函数的指针

代码语言:javascript复制
// 5.1 直接方式
int (*func_ret_c())(int) // 其中func_ret_c()是整个函数的骨架.
{
    int (*funcPtr)(int) = func;
    return funcPtr;
//    return func; 也可以直接返回函数的名称作为地址
}

// 5.2 间接方式
blk_c func_ret_c_d()
{
    return func;
}

#6. 函数的返回值是: block

代码语言:javascript复制
  // 6.1 直接方式
int (^func_ret_t())(int)
{
  return ^(int count){return count * 2 ;};
}

// 6.2 间接方式
blk_t func_ret_t_d()
{
    blk_t blV = ^(int count){return count * 2 ;};
    return blV;
}

0 人点赞