![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言学习
小灏灏同学
这个作者很懒,什么都没留下…
展开
-
二重指针的应用场景
当指针作为参数传递的时候,两种情况需要使用二重指针: 改变指针所指向的地址,比如如下例子: #include <stdio.h> void change(char *v) { v = "bbb"; } int main(int argc, char *argv[]) { char *p = "aaa"; change(p); printf("%s\n",p); retu...原创 2019-12-12 10:26:36 · 592 阅读 · 0 评论 -
GDB常用操作记录
GDB 常用操作 断点 添加断点:b <行号>;b <函数名>; 查看断点:info b;简写就是i b; 删除断点:先查看断点序号,然后 d <断点序号>; 一般操作 开始:start 退出:quit 继续:c 下一段代码:n(next) 下一句代码:s(step) 显示代码:l(list) 默认情况下,GDB显示指定位置处以及其前后的10行代码,但...原创 2019-11-14 15:35:41 · 114 阅读 · 0 评论 -
atexit函数详述
atexit函数用来注册终止函数,简单说即当main函数执行结束后调用的函数,严格来说是进程执行完将要退出前,exit调用的一些收尾函数。 atexit注册的函数类型应为不接受任何参数的void函数,即atexit(void(*func)(void))。 exit调用这些注册函数的顺序与它们注册的顺序相反,同一个函数可以登记多次,则也会被调用多次。 在头文件<stdlib.h>中。 ...原创 2019-11-14 15:32:24 · 706 阅读 · 0 评论 -
关于“C语言二维数组的动态申请”的一些tips
吃过好几次二维数组动态申请的亏,现在总结一下。 什么时候需要动态申请内存呢? 当输入的数组大小不能事先确定; 同时你还想优化内存的使用,而不是简单的定义一个大数组时(例如:int a[1000000]) 二维数组的动态申请 一维数组的动态申请这里不再赘述,相信大家经常能遇到也很熟悉,我们主要关心不常用的二维数组动态申请。 先上代码: scanf("%d %d",&row,&co...原创 2019-05-08 10:24:02 · 192 阅读 · 0 评论 -
C语言中的volatile关键字
volatile经常用于嵌入式C语言程序中,目的是不让编译器对其修饰的变量进行优化。 详细来说,编译器在把C语言程序编译成汇编语言时,会对程序进行优化,频繁用到的变量可能会直接存储在寄存器中,下次直接来寄存器读值,但是嵌入式环境下,某个内存地址的值是很容易被中断、多线程等因素修改的,当读取这样的内存地址(变量)的时候,应该去内存中读取而不是再读寄存器中的旧值,因此嵌入式软件开发人员要善于使用vol...原创 2019-05-16 15:14:51 · 368 阅读 · 0 评论