将ten_change的函数定义修改如下:
ten_change(int l,int *x)
然后在调用的时候修改为ten_change(8,x1);
1.函数指针是指针、指向函数的指针,函数名是执行函数体的入口地址,可以通过函数类型定义函数指针:
FuncType* pointer;也可以直接定义:type(*pointer)(参数列表);
其中:pointer为函数指针变量名,type为所指函数返回值类型。
2.函数有自己特定的类型,函数的类型由返回值、参数类型和参数个数共同决定。如:
int add(int i, int i)类型为int(int,int); 可以通过typedef为函数类型重命名:
typedef type name(参数列表); 例: typedef int f(int, int); typedef void p(int);
3.回调函数是利用函数指针实现的一种调用机制,函数指针是实现回调机制的关键技术;
回调机制原理:
调用者不知道具体事件发生时需要调用的具体函数;
被调函数不知道何时被调用,只只读需要完成的任务;
当具体事件发生时,调用者通过函数指针调用具体函数;
回调机制中的调用者和被调函数互不依赖!
在C语言中将二进制转换为十进制的解决方案:
int bin2dec(int bin[], int len){
int dec = 0, i;
for(i = 0; i < len; i++){
dec = dec * 2 + bin[i];
}
return dec;
}
int main(){
int bin[] = {1, 0, 1, 1, 0, 1, 0, 1}; // 二进制数为 10110101
int len = sizeof(bin) / sizeof(bin[0]);
int dec = bin2dec(bin, len);
printf("%d\n", dec); // 输出 181,即该二进制数的十进制表示
return 0;
}
解释:上述函数中使用了二进制转换的定义方法:将二进制数的每一位从最高位到最低位依次乘上 $2$ 的次幂,再求和得到十进制数。
同时,我们在主函数中通过 sizeof 操作符获得了二进制数组的长度,避免了手动设置数组长度带来的繁琐操作。