![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
文章平均质量分 81
wwxjya
这个作者很懒,什么都没留下…
展开
-
C语言操作符
1 算数操作符 + - * / %注1:除%外,其它算数操作符均可作用于整数和浮点数;注2:/两边都是整数时,结果为整数;有一个为浮点数时,结果为浮点数;注3:%两边必须为整数,结果为除法取余。2 移位操作符(1)左移>>:规则:左边抛弃,右边补0注:相当于给该数乘2。(2)右移规则:算数右移:右边丢弃,左边补符号位;原创 2017-10-19 15:08:04 · 137 阅读 · 0 评论 -
二叉树面试题
将二叉查找树变为有序双向链表: 考虑,二叉查找树的特点是左子树比根节点小,根节点又比右子树小。所以要把二叉查找树变为有序的双向链表,就要把左子树连接到它的前一个结点,右子树作为后一个结点,递归的进行下去。如图所示:问题解决: 按照中序遍历二叉树,如果根节点为空,直接返回; 如果左子树为空,修改它的左指针指向上一次访问的结点(*last)(由于是中序遍历,上...原创 2018-05-29 11:44:19 · 200 阅读 · 0 评论 -
C程序的运行
程序的翻译环境和执行环境:翻译环境:在这个环境中,源代码被转化为可执行的机器指令执行环境:在这个环境中,执行代码程序的运行过程:1、编译和链接(翻译环境) 我们写出的代码文件叫做源代码,这样的源代码要经过编译和链接生成可执行文件才能真正执行。对源程序进行编译,生成二进制目标文件(.obj文件);编译所得到的二进制目标文件还不能供计算机直接执行,一个程序可能包含多个源文件,而编译时针对各个...原创 2018-03-25 17:27:33 · 186 阅读 · 0 评论 -
C的存储类别(auto、static、register、extern)
一、自动变量(auto) 函数中的局部变量,动态的分配存储空间,数据存储在动态存储区(栈区)中。在调用函数时,系统会自动的给这些变量分配存储空间,在函数调用结束时就自动释放这些存储空间。因此,这类局部变量成为自动变量,用关键字auto作为存储类别的声明。 关键字auto可以省略,不写则隐含为自动存储类别。即 int a = 10;等价于 auto int ...原创 2018-03-30 16:55:50 · 789 阅读 · 0 评论 -
函数栈桢
调用函数的过程实际上是在栈空间上创建栈桢并释放栈桢的过程。也就是说,我们研究的是栈空间的变化。以下面代码为例,观察函数调用过程中汇编代码,寄存器等的变化:#include <stdio.h>#include <Windows.h>int Add(int a, int b){ return a + b;}int main(){ int a = 0xaaaa...原创 2018-03-14 20:43:26 · 155 阅读 · 0 评论 -
const、volatile与static
一、constconst修饰的变量是常变量,是不期望被修改的变量。我们如果要对它直接进行修改,程序编译时就会报错。可是,这个变量是可以被间接修改的:#include <stdio.h>#include <stdlib.h>int main(){ const int a = 10; int *tmp = (int *)&a; *tmp = 20; ...原创 2018-03-12 17:16:48 · 162 阅读 · 0 评论 -
C/C++程序内存的分配
作为一名程序员,要对计算机内程序内存的分配十分清楚,才能在编程中得心应手。在C/C++程序中,计算机是如何分配内存的呢?在上面的图中,可以清楚明了的看出C/C++对内存的分配:1.在一个C/C++程序中,程序对内存的分配分为代码区,全局区(静态区),堆区,栈区;地址是依次增大的。2.在代码区,存放的是程序的函数体的二进制代码;3.在代码区与全局区中间还有一个字符常量区,存放的是常量字符串,该区域中...原创 2018-03-11 20:19:43 · 642 阅读 · 0 评论 -
数据存储
一、整型存储数据是有高位和低位之分的。内存也是有低地址和高地址之分的。整型数据在内存中的存储方式有两种:大端和小端。大端是指数据的低位保存在内存的高地址处;小端是指数据的低位保存在内存的低地址处。负数在内存中存的是补码,我们把a在内存中的值转化为原码:(从高位到低位)00 00 00 0A;即低位存储在内存的低地址处。为什么会有大小端模式之分呢?答:这是因为在计算机系统中,我们是以字节为单位的,每...原创 2018-03-10 11:32:23 · 333 阅读 · 0 评论 -
函数递归
一、函数递归 递归是在程序执行过程中,直接或间接地调用函数自身的过程。通常是要把一个复杂的大规模问题转化成一个个小的问题来求解。递归求解问题在在一些时候可以大大减少代码的复杂程度,增加代码的可读性。值得注意的是:递归的使用要在每进行一次递归后,问题的规模都要变小;同时递归一定要有递归出口(也就是说,当进行递归到一定程度时,无需在进行递归,直接返回,避免无休止的递归下去)。//输入...原创 2018-03-15 11:24:56 · 428 阅读 · 0 评论 -
注释转换(C->C++)
转换原理图解:基于上图原理,可以写出代码: //主函数:#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include "标头.h"int main(){ convert(); system("pause"); return 0;} //具体实现:#define _CRT_S...原创 2017-12-04 18:28:14 · 175 阅读 · 0 评论 -
指针数组与数组指针、函数指针与函数指针数组
一、指针数组是一个存放指针的数组。eg:int *arr[];//[]优先级高,所以arr首先是一个数组,里面存放的是一个个指针int** arr[];//数组中放入二级指针mkm原创 2017-11-20 21:02:40 · 787 阅读 · 0 评论 -
自定义类型——结构体、枚举、联合
一、结构体我们知道,数组是将相同类型的元素放在一起;类似于数组,结构体是将相同或不同的元素放在一起。eg:struct example //example是结构体名,可以省略,但不建议省略{ //{}内部的是结构体成员 int a; char c; float b[10];}x,*p,arr[10];原创 2017-12-09 21:59:43 · 208 阅读 · 0 评论 -
指针(一)——指针与二级指针
一、指针理解指针是一个变量,用来存放地址的变量指针变量:是一个变量;是指有一个存储空间,里面放的是指针变量指针:变量的地址指针的存在是为了方便计算机的内存管理,经过计算和权衡,我们发现,一个字节给一个地址是比较合适的,在32位的机器上,假设有32根地址线,就可以编2^32个地址,就能对4G的空间进行编址,且地址由32个比特位组成,也就是4个字节,所以存放地址需4个字节的空间;在64位机原创 2017-11-20 21:25:51 · 249 阅读 · 0 评论 -
可变参数列表解析
我们知道怎样用C语言编写求确定个数的参数的平均值,可是当我们不确定具体的参数个数时,应该怎么办呢?一、首先,我们先来看一看main函数的原型:其中,argc是整型变量,表示命令行参数的个数; argv是字符指针数组,每个元素指向一个字符串——命令行的每个参数 envp是字符指针数组,每个元素是指向一个环境变量的字符指针。下面,我们进行验证——修改命令参数...原创 2017-11-13 18:13:06 · 144 阅读 · 0 评论 -
浅析数组名与&数组名的区别
一、一维数组我们借助sizeof帮助我们理解:运行结果如下:二、二维数组同样借助sizeof来理解:运行结果如下:三、字符型数组1 借助sizeof来理解:类似的:注意:a、b数组有一些差别,造成这种差别的原因是b数组是字符串赋值,此时,字符串结尾的‘\0’同样赋给了数组b,所以数组b比数组a多一个元素;2原创 2017-10-28 16:39:48 · 525 阅读 · 0 评论 -
找出字符串中第一个只出现一次的字符
题目:找出字符串中第一个只出现一次的字符输入描述:输入一个非空字符串输出描述:输出第一个只出现一次的字符,如果不存在输出-1示例1输入asdfasdfo输出o解题思路:和找出一个数组中只出现一次的数字方法类似,都是利用哈希表的思想来统计每个字符或数字出现的次数。然后在进行遍历,以返回只出现一次的数字或字符。这个题的难点主要在于要自己设计main函数用来打印结果。值得注意的是,在这种题目中一定要循...原创 2018-07-11 16:49:05 · 408 阅读 · 0 评论