
C语言_指针及回调函数练习
发布日期:2021-05-14 23:42:49
浏览次数:17
分类:精选文章
本文共 1983 字,大约阅读时间需要 6 分钟。
2021-04-12 函数高级
题1. 分辨各指针类型
在C语言中,指针的定义方式要根据其用途而定。以下是常见指针类型及其表示方式:
单指针:用于单个内存地址的指针。
int *p; // 单指针,指向int型数据。
常数指针:指针指向常量,不可修改。
int const *pci; //pci指向常量,无法赋值或修改。int *const p; //p不可赋值,但可以读取。
二维数组指针:可以表示二维数组的地址。
int (*p)[10]; // p是10个int型元素的二维数组指针。
函数指针:用于存储函数地址。
int (*pf)(void); // pf指向返回void的函数。
函数指针数组:存储多个函数指针。
int (*pfArr[10])(void); // pfArr包含10个函数指针。
注意事项:正确书写时应先写目标类型,再写指针符号。如int *p
而非*int p
。
题2. 空指针概念
在C语言中,void *
类型用于空指针,表示指向0的虚拟内存地址。常见用法包括:
- 静态空指针初始化:
void *p = NULL; // 或 nullptr(C++特性)。
- 勾画示例:
int main(int argc, char **argv) { void *p; // 声明了空指针。 p = nullptr; // 或 p = NULL。 // 可用于替代其他指针类型转换。}
示例分析:代码p=str;
存在安全隐患,因为str是常量内存,不可随意指针化。
题3. 常量指针与指针常数的运用
常量指针(指向const数据,读取权限高):
int const *pci = &a; // pci不可修改,或enkins不能ompilate。
指针常数(指针本身不可修改,但可以指向任意地址):
int *const p = &b; // p不可再赋值,但可以访问b的值。
示例解析:代码中int const *pci = &a;
正确,而int *const p = &b;
同样有效。
题4. 通用幂函数编写
实现一个通用幂函数,实现数的正次幂和负次幂
,可区分奇数次幂和偶次幂:
float power(int num, int pow, float (*func)(int, int)) { return func(num, pow);}
函数实现:
- 正次幂(pos_square):
float pos_square(int a, int p) { if (p == 0) return 1; for (int i = 1; i < p; ++i) { a *= a; } return a;}
- 负次幂(neg_square):
float neg_square(int a, int p) { static float result = 1; static int power = p; // 根据幂数处理...}
注意事项:幂函数需正确处理奇数和负幂数。
题5. 通用显示函数
实现一个通用函数,可显示多种类型的数据:
void show(int* a, int size, void (*printer)(int*)) { for (int i = 0; i < size; ++i) { printer(a + i); }}
具体实现函数:
show_int
:用于整数数组。void show_int(int* a, int size) { for (int i = 0; i < size; ++i) { printf("%d ", a[i]); } printf("\n");}
show_float
:用于浮点数组。void show_float(float* a, int size) { for (int i = 0; i < size; ++i) { printf("%f ", a[i]); } printf("\n");}
show_char
:用于字符数组。void show_char(char* a, int size) { for (int i = 0; i < size; ++i) { printf("%c ", a[i]); } printf("\n");}
show_str
:用于字符串。void show_str(char* str, int size) { for (int i = 0; i < size; ++i) { printf("%c", str[i]); } printf("\n");}
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月13日 19时16分43秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Coursera普林斯顿算法课第二次作业
2019-03-12
pip命令 failed to create process.
2019-03-12
做SMTP客户端遇报错:535 Error
2019-03-12
Python3的修改
2019-03-12
SQL基础学习(六)- MySQL的insert语句
2019-03-12
Python HTTP Content-Type常用对照表
2019-03-12
win10系统截图快捷键
2019-03-12
Pycharm学习(四)—— Pycharm的terminal介绍
2019-03-12
安装office报错:无法安装64位office,PC上找到了32位程序
2019-03-12
Robotframwork输出日志里中文显示乱码问题
2019-03-12
c++链表实现通讯录管理系统
2019-03-12
设计模式--单一职责原则的个人理解
2019-03-12
go语言学习--day3(函数)
2019-03-12
树莓派的外设开发
2019-03-12
百度飞浆深度学习_卷积神经网络(思维导图手写笔记)(1:理论部分)
2019-03-12
VGG中1*1的卷积核相比于全连接层的好处及原因
2019-03-12
函数指针介绍以及初步学习。讲解以函数为参数的函数的写法即作用
2019-03-12
小程序支付踩的第一个坑
2019-03-12