c语言
cookie1215
这个作者很懒,什么都没留下…
展开
-
typedef和#define的区别
1. 执行时间不同。 typedef在编译阶段进行处理,支持类型检查和调试,#define在预处理阶段,只是进行简单的宏替换。2. 功能不同。 typedef为其他已存在的类型起别名,屏蔽不同平台的差异,经常与struct结合使用。而#define只是进行宏定义,他不只可以为类型起别名,还可以进行常量,变量和编译器的定义。3. 作用域不同。 #define只要提前进行宏定义,就可...原创 2018-04-08 17:20:31 · 145 阅读 · 0 评论 -
for/while和if/switch
for适合用于知道循环次数的情况,而while循环适用于知道循环条件的情况。while循环更强大。它们两个的效率基本没有差别。gcc test.c -g/gcc -c test.c ->a.oobjdump -d a.o//查看程序对应的汇编代码switch(会生成跳转表):1、当case语句小于等于3句的时候,switch语句的底层实现与if-else的底层实现相同。2、当case语...原创 2018-04-09 10:16:13 · 183 阅读 · 0 评论 -
逻辑位移和算术位移
在C语言标准中,有两种位移分别为算术位移和逻辑位移。逻辑位移:在位移运算符(>>和<<)之前的数是无符号数,编译产生的汇编指令是逻辑位移。算术位移:在位移运算符之前的数是有符号数,编译产生的汇编指令是算术位移。左移:两种位移都在右边补0。右移:逻辑位移在左边补0,算术位移在左边补符号位。...原创 2018-04-09 10:15:43 · 5719 阅读 · 1 评论 -
字符编码
字符集:是指字符的集合。编码集:给字符集中的每一个字符都分配一个整数符号。编码集中字符被分配的整数的编号,不一定就是该字符在计算机中存储的值,具体采用什么二进制整数值要由编码方式决定。一般采用十六进制(便于书写和阅读)来表示某个字符的编码。Unicode是字符集,它有三种编码方式,分别是:UTF-8,UTF-16,UTF-32。UTF-8:特点:1、可变长编码,由第一个字节决定该字符编码长度;2、...原创 2018-04-09 10:15:24 · 77 阅读 · 0 评论 -
数据类型
在32位操作系统下的32位编译器:1、各种数据类型和指针所占的内存字节数如下:所有类型的指针都是4字节。2、函数除了返回值为void类型的函数外,其他函数所占的字节数等于函数的返回类型所占有的字节数。与函数体内部无关3、结构体、类是内部各数据类型占用之和,注意边界对齐(以最大的为标准)。 4、联合体取其中占有字节数最大的数据类型所占的字节数。64位编译器与32位编译器相比较,数据类型所占的内存字节...原创 2018-04-09 10:15:07 · 102 阅读 · 0 评论 -
如何得今天是今年的哪一天
#includebool IsLeapyear(int year){if(year%4==0 &&year0!=0 || year @0==0){return true;}return false;}bool IsThirty(int month){if(month==4 ||month==6 ||month==9 ||month==11){return true;}return ...原创 2018-04-09 10:14:50 · 249 阅读 · 0 评论 -
变量和常量
> >= < <= 双目运算符,比较结果为bool值==:比较是否相等,不能做左值放在赋值号的左边=:赋值表达式的值是你所赋的值大小!=:不等号表达式1?表达式2:表达式3 :三目运算符变量先定义后使用:告诉编译器为该变量分配多少个内存,并以怎样的方式解析它。常量:整型常量,实型常量,字符常量,字符串常量,符号常量(宏)。不允许被修改。宏:可以一改全改,可以见名知...原创 2018-04-09 10:14:36 · 109 阅读 · 0 评论 -
c语言运算符
算法:解决问题的方法和步骤scanf函数不要使用,用户体验不好,用函数传参来符号:优先级数越小,优先级越高():提升优先级,函数调用[]:数组数组越界,程序会崩溃(新的编译器).->非:0为假,非0为真表达式1&&表达式2表达式1||表达式2i++:把i的值作为整个表达式的值,然后i再自加1i--:把i的值作为整个表达式的值,然后i再自减1++i:把i的值自加1,再把这个值作...原创 2018-04-09 10:14:14 · 261 阅读 · 0 评论 -
c基础
fioat浮点数的表示方法:float:4个字节32个二进制位12.5->1100.1->1.1001*2^3如图所示:最高一位表示符号位:0正1负接下来的八个位用来保存指数,指数依然有正有负。指数(十进制)加127,负责取值范围接下来的23位用来保存尾数,负责精度大端和小端:Int a=0x12345678; 0 1 2 3小端:低地...原创 2018-04-09 10:14:00 · 116 阅读 · 0 评论 -
c语言类型转换
C语言类型转换:自动类型转换(默认类型转换,隐式转换,编译器帮你完成)和强制类型转换(自己转成自己想要的类型)。自动类型转换最常见的有:混合运算,赋值运算和函数值的类型转换。赋值运算:就是把=右边的表达式的类型转换成=左边的表达式的类型。混合运算:指在一个表达式中参与运算的对象不是同一种数据类型,这时就需要将一个级别低的变量的数据类型转换为级别高的变量的数据类型。函数返回值的类型转换:强制类型转换...原创 2018-04-09 10:16:28 · 187 阅读 · 0 评论 -
变量
整型字面值在缺省的情况下总是默认为int家族中最短但足以容纳整个值的类型。枚举类型后面的值总是比前面的大1。浮点数字面值在缺省的情况下都是double类型的。指针变量就是一个其值为另外一个(一些)内存地址的变量。字符串常量的直接值是一个指针。Int *a;//*应靠近a。常量:1、constconst int a=5;int const b=5;//两种方式都可以声明常量,选择一个你所喜欢习惯...原创 2018-04-09 10:17:04 · 110 阅读 · 0 评论 -
语句和运算符
语句:空语句:不执行任何任务,以;结尾。C语言无bool值,用整型来代替。0表示假,非0表示真。break和continue用于对包围它的最内层的循环起作用。用goto或将多层循环放在一个函数里,用return关键字跳出多层循环。goto 语句标签 ;//此语句的作用是执行语句标签后的语句。语句标签:与标签想匹配所进行的任务。操作符: 左值可以出现在=的左边,意味着一个特定的位置。右值出现在=...原创 2018-04-10 11:07:27 · 84 阅读 · 0 评论 -
判断一个数是有符号数还是无符号数
#include int main(){ unsigned int a=0; if(a { printf("unsigned"); } else { printf("signed"); }}打印结果为unsigned分析:如果a为无符号数,则a-1为有符号数,与操作符左边的类型不匹配,编译器会将a-1转换为无符号数,则表达式...原创 2018-04-10 11:09:54 · 1479 阅读 · 0 评论 -
malloc/free和new/delete
1. malloc/free是函数,而new/delete是关键字。2. malloc成功后返回void *指针,需要强转,失败则返回NULL。new成功后返回指向对象的指针,失败抛出异常。虽然C++尽最大的可能去兼容C语言的特性,new失败也会返回NULL,但很少使用。3. malloc申请空间时要指明申请空间的大小,而new只需要对象名就可以了。4. ...原创 2018-04-10 11:09:37 · 105 阅读 · 0 评论 -
c和c++的区别
C语言是面向·过程的,C++是面向对象的。C++是在C语言的基础上发展而来的。C++兼容很多C语言的语法特性。1. C语言没有C++的class。但是C++把C语言中的struct进行扩充,当作类来使用,struct和class唯一不同的是struct的默认成员访问修饰符是public,class的默认成员访问修饰符是private。2. C语言中的const修饰的变量是常变量,不能用来定...原创 2018-04-10 11:09:18 · 105 阅读 · 0 评论 -
随笔
无论是指针变量还是普通变量,函数调用时传递的参数均是实参变量的一份拷贝,因为实参是局部变量({}内的变量),所以函数调用并不能修改实参本身,只能修改实参的一份拷贝。指针变量可以通过实参的一份拷贝修改指针所指向的变量。若想要使用修改的指针变量的实参的拷贝1. return2. 二级指针多维数组只能省略第一维的数组长度是由编译器决定,方便编译器推断数组的行数。避免使用全局变量,因为全局变量...原创 2018-04-10 11:08:57 · 80 阅读 · 0 评论 -
指针编程题
打印的是实际的数据。&a代表整个数组,&a+1则指向整个数组的下一个元素,所以ptr1[-1]代表数组的最后一个元素。a代表一维数组首元素首地址,(int)a+1则代表一个普通的整数,将上式再转换为一个指针,则该指针存放了数组第一个元素的第二个字节开始的连续四个字节。本题要考虑本机的数据存储模式(大端和小端,我的电脑是小端)...原创 2018-04-10 11:08:36 · 699 阅读 · 0 评论 -
指针和数组
多维数组形式参数必须写成int(*mat)[10],只有第一维可以这样,必须知道第二维及以后的各维的长度才能对各下标进行求值。函数名代表函数首地址。回调函数:某个函数必须能够在不同的时刻执行不同类型的工作或者执行只能由函数调用者定义的工作。只给非只读变量(可修改左值)赋值,数组名不能做左值。arr和&arr两者的值相同,但意思不同。arr代表数组首元素地址,&arr代表数组首地址。...原创 2018-04-10 11:08:20 · 76 阅读 · 0 评论 -
指针
编译器按贪心的法则读入符号。余数的符号要求与被除数的符号相同。变量的值就是分配给该变量的内存所存储的值。未被初始化的指针,它所指向的值所保存的位置是未知的。NULL指针不指向任何东西。指针务必进行初始化,当你指定该指针指向什么地址时,你就将该指针初始化为该地址,否则初始化为NULL。指针-指针:两个指针均指向同一个数组中的元素。确保指针的有意义,避免越界指针和指向未知位置的指针。标准允许指向数组元...原创 2018-04-10 11:08:02 · 105 阅读 · 0 评论 -
关键字的一些计算
static i=11,j=1.sizeofsigned unsigned :编译器缺省默认情况下数据为signed类型。 -0和+0在内存中存储方式一样,均为0000 0000因为-1 的存储方式为 1111 1111 -0比-1大1,即为1 0000 0000。但是整型只有四个字节,最高位被舍弃。所以+0和-0的存储方式一样空指针是没有指向的指针,将暂时用不到的指针定义成空指针,以...原创 2018-04-10 11:07:46 · 687 阅读 · 0 评论 -
操作文件函数
文件:指存储在外部介质(磁盘磁带)上数据的集合。ASCAII码文件也叫文本文件。在磁盘中存储每个字符对应的ASCII码。在屏幕上按字符显示,我们可以看的懂。二进制文件按二进制的编码方式来存储文件的,显示在屏幕上时,我们并看不懂。操作系统是以文件为单位对数据进行管理的。FILE * fopen(文件名,使用方式)使用方式:r,w,a,rb,wb,ab,r+,w+,a+,rb+,wb+,ab+成功·返...原创 2018-04-10 11:07:09 · 122 阅读 · 0 评论