C++ 函数



//在原型的函数里面可以包括变量名也可以不包括。原型中的变量名相当于占位符,因此不必与函数顶一种的变量名相同。
int prototype(int,int);
//c++可以省去变量名,仅当接受可变参数的c语言(printf)交互时才这么做。
void ellipsis(...);
//定义一个传数组的函数
void log_arr(int arr[], int num)
{
    int i;
    for (i = 0; i < num; ++i) {
        printf("log this num is %d\n", arr[i]);
    }
};
//当且仅当用于函数头或者函数原型中,int *arr 和 int arr[]的含义才是相同的,他们都意味着arr是一个int指针
void log_arr_same(int *arr, int num)
{
    //数组的两个恒等式
//    int i;
//    arr[i] == *(arr + i);
//    &arr[i] == arr + i;
};
//为了防止函数无意中修改数组的内容,可在声明形参时使用关键词 const
void log_arr_not_modify(const int *arr, int num);
//指针和const
void pointer_and_const()
{
    int age = 39;//age can be modify.
    const int* pt = &age;//pt can't be modify
    //*pt = 38;// read-only variable is not assignable
    age = 38; //This's ok.
    const int anotherAge = 40;
    //int* pAge = &anotherAge;//不可行。
    
    //修改const指针,指向指针的指针
    const int **pp2;
    int *p1;
    const int n = 13;
    //pp2 = &p1;//不允许
    *pp2 = &n;
    *p1 = 10;
};
//传一个二维数组,第二维长度智能为4
int sum(int arr[][4], int size);
int sum_same(int (*arr)[4], int size);
//传递结构的地址而不是整个结构可以节约时间和空间
//void print_student(const Student* stu);
//递归
void recurs(int start)
{
    printf("recures is %d\n", start);
    if (start)
    {
        recurs(--start);
    }
    else
    {
        printf("recures is done\n");
    }
    printf("end\n");
}
//函数指针
void func_pointer_test()
{
    static int i = 0;
    ++i;
    printf("我被调用了--%d\n", i);
}
void func_pointer()
{
    /*
     为提供正确的运算符优先级,必须在声明中使用括号将*pf括起。括号的优先级比*高。
     因此*pf(int) 意味着pf()是一个返回指针的函数
     而(*pf)(int) 意味着pf是一个指向函数的指针
     */
    void (*pf)(void);
    pf = func_pointer_test;
    pf();
}
//声明,并实现一个传入一个函数及执行次数的函数
void func_pointer_callback(void (*pf)(void),int times)
{
    while (times--)
    {
        pf();
    }
}
void func_pointer_declare()
{
    //声明并实现长度为三的函数指针数组
    void (*pf[3])(void) {func_pointer_test, func_pointer_test, func_pointer_test};
    pf[0]();
    //使用typedef进行简化
    typedef void(*call_back)(void);
    call_back back = func_pointer_test;
    back();
    call_back fun_pointer_arr[3] = {back, back, back};//三个函数指针的数组
    fun_pointer_arr[0]();
    call_back (*pointer_func_arr)[3] = &fun_pointer_arr;//指向有三个方法指针的数组
    (*pointer_func_arr[0])();
    
}
//用于宏测试的方法
int add(int a, int b){
    return a + b;
}
// 定义测试static的方法
int count()
{
    //只会在函数声明的时候声明这个变量。
    static int count = 0;
    ++count;
    return count;
}


//定义宏方法
#define ADD(_Num1_,_Num2_) add(_Num1_,_Num2_);








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值