zoukankan      html  css  js  c++  java
  • C语言基础(2)

    1、编译预处理:C源文件未必有主函数,但作为一个由多个C源文件组成的C程序必须有主函数。预编译处理都不是作为C语言的,不算运行时间,宏替换仅是文本的替换。比如#define f(x) (x)*(x)替换f(2+2)就是(2+2)*(2+2),#define f(x) x*x替换f(2+2)就是2+2*2+2。

    2、全局变量和局部变量的作用域:全局变量都是静态变量,其作用域是从定义其的位置到整个源程序结束为止。局部变量有三个:自动auto,寄存器register和静态static。自动随着函数的使用与否创建和消失,寄存器变量是分配在CUP中,没有内存地址,静态变量存放在固定内存中,一直处于内存中直到程序运行结束才释放。

    3、动态存储分配:malloc(size)用来创建size个字节的连续存储空间,返回值类型为void *型,malloc函数常用于动态创建链表节点,比如int *p; p=(int *)malloc(sizeof(int));,calloc(n,size)用于创建n个同一类型的连续存储空间,可以理解为n个malloc函数。例如:int *p; p=(int *)calloc(10,sizeof(int));,p是指向首地址的。free(p)释放动态分配的存储单元。

    4、C主函数的参数:int main(int argc,char *argv[])。

    5、结构体:结构体是多个数据类型的集合,格式是struct 类型名{类型1 成员名1;类型名2 成员名2;…};这仅是一个数据类型,当然也可以用typedef来定义一个简洁的标识符来表示这个结构体。结构体变量是结构体类型的变量,如:struct stu{int num; char name[10]} x,y;这里x,y就是结构体变量,每一个变量占有14个字节。结构体成员的引用可以用结构体变量加(.),也可以用指针变量名-> 成员名或(*指针变量名)->成员名。

    6、共用体:共用体的关键字是union,共用体所占字节数是所有成员中字节数最大的那个。共用体的本质是使用覆盖技术,覆盖内存中的变量。

    7、C语言变量标识符一般用小写开头的,常量标识符一般是大写,并且不以数字开头。标识符由字母、数字、下划线组成,所以辨别标识符时也同时要辨别是下划线还是横杠。

    8、有小数的输出格式控制符:%m.nf表示输出实型数据的宽度为m(包括小数点),小数位宽度为n。若n小于给出的实型数据的小数位,截掉右边的部分,四舍五入最后一位;若n大于给出的小数位,右边补零;若m小于实型数据的宽度,自动突破m的限制;若m大于实型数据的宽度,左边补空格。

    9、常量分为五种:整型常量、实型常量、字符常量、字符串常量、符号常量。前四者好说,符号常量用一个字符来表示一个常量。比如#define 符号常量名 常量,符号常量名用标识符,一般是大写,常量可以说数字也可以是字符。如#define SIZE 8。

    10、gets();接收字符串输入时遇到回车截止,scanf();接收字符串遇到回车或者空格截止,所以scanf();不能输入一连串的空格。

    11、C语言中没有定义逻辑类型bool,所以一般用0代表假,非0代表真。

    12、变量赋值的两个连等号一般是不允许的,如:float a=b=10.0;,但表达式连续赋值绝对不允许。

    13、编译型语言和解释型语言:编译型语言在编译的时候直接翻译成机器码,再次执行时就不用翻译了,而解释型语言每次执行都要翻译成机器码,一般执行效率较低,在翻译成机器码之前一般会形成一种中间语言。解释型语言一般是网页脚本、服务器脚本和一些辅助线接口,他们对效率要求不高,但对跨平台要求高,其中有perl/python/javascript/shell/java/c#/ruby/matlab等,c/c++/delphi/pascal属于编译型语言。Java是解释型语言,但它会编译成一种字节码,然后由虚拟机翻译成机器码。

    14、字符串比较(strcmp(str1,str2);)是先比较第一个字符,如果str1的第一个字符大于str2的第一个字符,则值为正;若前者第一个字符和后者第一个字符相同,则再比较相同位置上的第二个字符;如果两个字符串长度不同,前i个字符相同,则字符串长的大于字符串短的。

    15、字符常量分为两种:一种是普通字符(如‘a’),一种是转义字符。ddd代表1~3为八进制数,xhh代表两个十六进制数数值。求余运算符%两边的必须是整型。赋值表达式的计算顺序是”由右到左“。

    16、输入输出函数:printf()函数中有几个格式输出符就输出几个数。puts();函数和gets();函数是输入输出字符串的,其必须有输出项,printf();和scanf();是C类库的函数,不必有输入输出项,也可以输入输出NULL。getchar();和putchar();是输入输出字符的,也必须有输入输出项。printf(“%s”,str);和puts(str);意思一样。

    17、C语言左移右移:移动前先补全位数(8位或16位),左移一位乘以2,也可以理解为丢弃最高位,低位补零。右移是右移后,符号位正数补0,负数补1。如8<<1,8的二进制数是00001000,右移一位是00000100,是4。

  • 相关阅读:
    CodeForces Round #678(Div2) E.Complicated Computations Mex性质,权值线段树
    P6075 子集选取 思维
    HDU-4747 Mex 线段树应用 Mex性质
    P1273 有线电视网 树形DP 树上背包
    P6786 GCDs & LCMs 数学推导
    [CTSC1997] 选课 树上背包
    Gym-101915K Poor Ramzi 区间DP
    [MdOI R2] Odyssey 拓扑排序上DP
    CodeForces Div3.F
    二分-B
  • 原文地址:https://www.cnblogs.com/joeshine/p/4342937.html
Copyright © 2011-2022 走看看