C语言中指针的高级用法
来源:互联网 发布:淘宝无线优惠券转化 编辑:程序博客网 时间:2024/05/20 16:41
点击打开链接
问题描述:指针是C语言很有特色的一个部分,但是使用也比较复杂,很容易导致一些莫名的错误,比如有时候函数指针没有赋值,有时指向了未定义的内存,这些时候都可能导致程序异常执行或者崩溃。但指针的灵活性让它可以实现很多复杂的操作,如指向指针的指针,指向函数的指针。
void add_to_list(struct node **list, int n) {
}
add_to_list(&first, 10);
指向函数的指针:指针不只能指向数据,也能指向函数。函数占用内存单元,每个函数都有地址的,因此可以使用指向函数的指针。指向函数的指针在调用函数较多的地方会用到,另外也可以设计架构利用函数指针模拟某一对象的行为。
double integrate(double (*f)(double), double a, double b); // 声明一,表明第一个参数接收函数指针
double integrate(double f(double), double a, double b); // 声明二,不建议使用,表意不明确
result = integrate(sin, 0.0, PI/2); // 调用
void (*pf)(int); // 函数指针变量声明
pf = f; // 函数指针变量赋值
(*pf)(i); // f(i),函数指针指向的函数的调用,也可以直接用pf(i)
void (*file_cmd[])(void) = {new_cmd, open_cmd; close_cmd, close_all_cmd, save_cmd, save_as_cmd, save_all_cmd, print_cmd, exit_cmd}; // 函数指针数组初始化赋值,函数指针数组在函数指针变量后多了[]
(*file_cmd[n])(); // 函数指针数组元素的调用,调用对应的函数,也可以用file_cmd[n]();
int * restrict p; // p为受限指针,restrict为关键字
void *memcpy(void * restrict s1, const void * restrict s2, size_t n); // 表明s1和s2不应当重叠
void *memmove(void * s1, const void * s2, size_t n);
struct vstring {
}; // 包含字符串数组的结构,该结构最后一个成员为数组时,长度可省略--就是灵活数组成员
struct vstring *str = malloc(sizeof(struct vstring) + n);
str->len = n;
0 0
- C语言中指针的高级用法
- [Pointer]C语言中指针的高级用法
- C语言中宏的高级用法
- C语言中函数指针的用法
- C语言中指针的用法
- C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表
- c语言-高级指针
- C语言--高级指针
- C语言高级指针
- c语言指针的用法
- c语言指针的用法
- C 语言指针的用法
- C语言:指针的用法
- c语言中指针的用法以及注意的地方
- c语言中函数指针的用法和技巧
- C语言中指针的几种用法
- C语言中指针的几种用法
- C语言中指针的一些概念及用法
- Java IO操作——简单了解RandomAccessFile随机读写文件操作类的使用
- Android开发禁止首次进入activity弹出软键盘,限制屏幕只能竖屏或者横屏展示
- 乘法逆元
- 关于动作的一些个人代码以及旋转源代码
- initgroups
- C语言中指针的高级用法
- VC中ListCtrl自动显示到最新添加数据
- Linux系统管理命令之lastcomm的使用
- stm32双串口收发
- 操作系统思考 第五章 更多的位与字节
- Linux定时器工具-crontab 各参数详解及如何查看日志记录
- C语言initgroups()函数:初始化组清单
- 通过JS判断联网类型和连接状态的实现代码
- 水题总结