0
点赞
收藏
分享

微信扫一扫

C语言初阶总结

一、变量

1,各种数据类型:

字符/字符串:    char 1字节
整型(整数):   short 2字节  int 4字节  long 4字节  long long 8字节
浮点型(小数): float 4字节,保证6位有效数字正确    double 8字节,保证15位有效数字正确
(编译器不同,数值可能会稍有不同)

但总的满足:short <= int <= long <= long long 

另外,指针变量,32位系统为4字节,64位为8字节。

2,各类型数值范围计算方法

        例如,int型,4字节,而1字节(byte)等于8比特位(bit),故一个int位32位,而第一位为符号位(0代表正,1代表负),而正数负数之间还有一个0,故一个int数值范围为 -2^31到2^31-1。

(若超出范围,数据会溢出,造成截断,具体为:先转二进制补码,再直接截断超出部分,再转回原码。这种情况多见于,将 int 类型数值赋值给 short 等类型)

3,字面常量

包括整型常量(1,2,3...)、字符型常量('H'、'e'...)、字符串常量("点赞"、"收藏"..)。

4,const和define

const叫作常变量,本质是变量,define为标识符常量,仅仅是一个标志,也称宏定义。

5,全局变量和局部变量

全局变量,在main函数外面前面定义变量即可,*生命周期是整个程序。定义后,可以在同一工程下用extern来调用变量。

局部变量,在函数内部定义的变量(包括main函数),*生命周期是所在函数。

若一个变量名既被定义全局又定义局部,则以局部为准。

(*生命周期:变量创建和销毁时间段)

6,static

静态变量,当内有static定义的变量调用多次,则每次static定义的变量值在前一次调用基础上进行数值改变。修饰全局变量,但只能在源文件内使用,即使同一个工程不同源文件也不能使用。

7,typedef:类型重命名,例如:

typrdef longlong ll

下面即可用 ll 代替 longlong  。

8,无符号类型

例如,unsigned int,也可用 size_t 表示,为无符号整型,均为非负数,对应使用%u,数值范围为 0到 2^31-1,若强行给一个负数,则会转成二进制补码,然后表示,如 -1,最终就为全1转回十进制,为 2^32-1 。

9,类型转换

对于变量,例如,float x=3.51,可以利用 (int)x,来临时强制转换,结果为3,可见该法直接截断,并不四舍五入,另外这并不改变 x 的值,x仍然为3.51;

对于常量,例如,3.1415926535,可以采用 3.1415926535f,即可变成 3.141593 ,可见该法四舍五入。

二、运算

1,除号(/): 

相除结果为负,则相除结果向下取整;若为正,则结果向上取整。总之,向靠近0的方向取整。

2,位操作符

<<左移 将数字转二进制补码,再左移,最右位补0,再转回原码。

>>右移 将数字转二进制补码,再右移,算术右移最左^符号位(正数为0,负数为1,无符号为0),逻辑右移补0,再转原码。(具体是哪种右移,可自行检验)。

&按位与,补码,同1为1,有0则0。

| 按位或,补码,有1为1,全0则0。

^ 按位异或,补码,不同为1,相同为0。

~按位取反,补码,每一位取反,包括符号位。

基操

a=a | (1<<4) 补码第五位变1,a=a&~(1<<4)补码第五位变0。

a=a^b;b=a^b;a=a^b;实现ab无需再设变量交换。

3,逗号表达式

(表达式1,表达式2,... ...,表达式n),执行表达式 1 到 n ,并返回表达式 n 的值。

4,字符串

#include <string.h>

strlen(arr) 求字符串长度(不包括\0);       memset(arr,'x',5)将arr前五个变'x' 。

strcmp(arr1,arr2)比较字符串,字典比较,ASCII码值各位依次比较,如"dianzhan"<"shoucang",就是由于'd'的ASCII小于‘s’的。> 输出正数(1), < 输出负数(-1),= 则输出 0 。

strcpy(arr1,arr2) 把 arr2 复制给 arr1 ,返回arr1地址。

5,算术转换

例如, int 型加 float 型,则自动将 int 型转化为 float 型进行运算   。

6,整型提升 

char,short 类型,参与运算( + - * / ! )就会整型提升,char +x、char !x 大小均为 4 字节  。

7,sizeof

sizeof(a) ,a可以是整型数组也可以是字符串,若为int a[3]={1,2,3},则该结果为 4*3 ;

可以利用 sizeof(a)/sizeof(a[0]) 来计算数组长度,可以包括'\0' ;

sizeof 应该用 %u 形式输出。

sizeof内进行的运算并不生效,但会影响大小判断。

8,break,continue

break跳出整个循环,嵌套循环只会跳出所在的那个循环,不会执行for中常用i++;

continue跳出一次循环,会执行for中常用i++。

9,switch

常用于打印菜单,与case、break搭配使用,只能用于整型(字符,传递的是ASCII)。

10,关于\

\可以用来转义,例如输出双引号时可以在双引号前面加\即可;\ddd一个d代表一个八进制数;\xdd一个d代表一个十六进制数。

三、指针

1,内存存储,例如0x 1001 1001,除0x外,其他每一位均是一个十六进制,1位0001,0为0000,其中两个数字为1字节。

2,指针类型,取决于指向类型,不仅仅决定了解引用权限大小(可在int中一个字节一个字节取),更决定了走一步走多远(arr1+1,int型则为字节加4)。

3,定义后应该赋初值,可用空指针NULL,还要避免野指针,不能越界。

4,const在指针中

const int *p        *p值可以变,但不能指向其他地址

int *const p        *p值不可以变,但能指向别的地址

int const *const p  值和地址均不能变

四、基本知识

1,相关企业招聘需要掌握以下内容:计算机语言(C/C++/Java)、数据结构和算法、操作系统、计算机网络+网络编程、数据库、脚本语言

2,1TB=2^10GB        1GB=2^10MB        1MB=2^10KB(byte字节)        1KB=8kb(bit比特位)

3,数组元素不用'\0'作为结束标识符,若有算元素个数,字符串以'\0'作为结束标志,其长度不算'\0'

4,栈区:局部变量,函数的参数 ;       堆区:动态内存分配 ;       静态区:全局变量,static修饰的静态变量 ;

每次定义调用一个函数就要开辟一片栈区,而实参进形参则要在因该函数开辟的栈区中用部分栈区;变量从搞地址开始用,数组存放则是随着标号从低地址到高地址。

5,结构化程序设计语言:顺序结构,选择结构,循环结构。

6,结构体

创建:struct stu {int a;char b};        使用:struct stu shhh={123,'h'}        调用:shhhh.a   、 shhh.b

7,两版本

Debug(调试)版本,可以更好的调试;Release(发布)版本,优化Debug的一些算法,生成的exe文件可以在其他电脑直接运行,且比Debug版本的更小,但Release版本不便调试。

8,计算数组长度:遍历,递归,两指针相减

9,缓冲区:键盘输入值时,并未将这些值存储,而是在键盘中,在回车之后会存储到缓冲区,其中'\n'也会占用缓冲区,常用 getchar() 来读走 '\n'

10,一些命令

cmd:

shutdown -s -t 60        60s关机                shutdown -a        取消关机

start cmd %0        弹出一次 cmd 窗口

<windows.h> :       Sleep(1000)延迟1000ms        system("cls")清屏

10,goto

少用慎用,可用于跳出多重循环,但只能在一个函数内跳(包括main函数)。

11,静态库

导入静态库,将lib文件拖至工程下(与.c文件同一个文件夹),在.c的代码开头,#pragma comment(lib,“... ... .lib")。

12,随机数

利用时间戳,#include <time.h>

srand((unsigned int)time(NULL))        要a~b的随机数,rand()%(b-a+1)+a

13,assert

#include <assert.h>

断言,当可以条件符合时,无任何问题,但不符合时,则会报错,且在命令行窗口指出错误行数列数,极大方便调试。

举报

相关推荐

0 条评论