基础部分笔记
1.数据类型
基本类型
整型
整型可分为有符号(signed)和无符号(unsigned),short(2byte)、int(4byte)、long(4byte)
浮点型
float(4byte)、double(8byte)
字符型
char(1byte)
构造类型
数组
结构体struct
共用体union
枚举
各数据类型精度
| 类型 | 存储大小 | 值范围 |
|---|---|---|
| char | 1 字节 | -128 到 127 或 0 到 255 |
| unsigned char | 1 字节 | 0 到 255 |
| signed char | 1 字节 | -128 到 127 |
| int | 2 或 4 字节 | -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 |
| unsigned int | 2 或 4 字节 | 0 到 65,535 或 0 到 4,294,967,295 |
| short | 2 字节 | -32,768 到 32,767 |
| unsigned short | 2 字节 | 0 到 65,535 |
| long | 4 字节 | -2,147,483,648 到 2,147,483,647 |
| unsigned long | 4 字节 | 0 到 4,294,967,295 |
范围可在/usr/include/limits.h中查询
查看ASCII码:man ASCII
2.存储类型
auto
范围变量,局部,默认是随机值,默认存储类型
register
寄存器型,将变量放入CPU的寄存器中加快程序运行速度。寄存器变量不可用地址,申请不到就使用一般内存,同auto
static
静态存储型变量,创建后生命周期直到程序结束,固定地址存放,不是堆栈存放,默认为0
extern
全局变量,可在函数体外说明,也可在外部(其他文件)使用,编译时需要带着extern修饰的变量所在的文件,原文件无需使用extern,引用文件需要使用extern修饰该变量
3.运算符优先级
z=(x+=1,y-=10);z的值最终会是y-=10的值




4.输入输出函数
输出函数
putchar(int c);输出ASCII码中对应是字符,也可直接传入字符
格式字符
1.d 格式字符
功能:用来输出十进制数
格式:%d:按整型数据的实际长度输出
%md:m 为指定的输出字段的宽度。如果数据的位数小于 m,则左端补一空格;若大于 m,则按实际位数输出。
%ld:输出长整型数据。
2.o 格式字符
功能:以八进制形式输出整数;
格式:%o:按整型数据的实际长度输出
%mo:m 为指定的输出字段的宽度。如果数据的位数小于 m,则左端补一空格;若大于 m,则按实际位数输出。
%lo:输出长整型数据。
3.x 格式字符
功能:以十六进制形式输出整数
格式:%x:按整型数据的实际长度输出
%mx:m 为指定的输出字段的宽度。如果数据的位数小于 m,则左端补一空格;若大于 m,则按实际位数输出。
%lx:输出长整型数据。
4.u 格式字符
功能:以十进制数输出无符号整数
格式:%u:按整型数据的实际长度输出
%mu:m 为指定的输出字段的宽度。如果数据的位数小于 m,则左端补一空格;若大于 m,则按实际位数输出。
%lu:输出长整型数据。
5.c 格式字符 **
功能:输出单个字符
格式:%c:按整型数据的实际长度输出
%mc:m 为指定的输出字段的宽度。如果数据的位数小于 m,则左端补一空格;若大于 m,则按实际位数输出。
%lc:输出长整型数据。
6.s 格式字符
功能:输出字符串
格式:%s:按整型数据的实际长度输出
%ms:m 为指定的输出字段的宽度。如果数据的位数小于 m,则左端补一空格;若大于 m,则按实际位数输出。
%ls:输出长整型数据。
7.f 格式字符
功能:以小数形式输出单、双精度实数
格式:%f:按整型数据的实际长度输出
%mf:m 为指定的输出字段的宽度。如果数据的位数小于 m,则左端补一空格;若大于 m,则按实际位数输出。
%lf:输出长整型数据。
8.e 格式字符
功能:以指数形式输出单、双精度实数
格式:%e:按整型数据的实际长度输出
%me:m 为指定的输出字段的宽度。如果数据的位数小于 m,则左端补一空格;若大于 m,则按实际位数输出。
%le:输出长整型数据。
9.g 格式字符
功能:以 %f、%e 中较短的输出宽度输出单、双精度实数
格式:%g:按整型数据的实际长度输出
%mg:m 为指定的输出字段的宽度。如果数据的位数小于 m,则左端补一空格;若大于 m,则按实际位数输出。
%lg:输出长整型数据。
gets(字符数组);会自动换行
%p获取变量地址
输入函数
getchar();获取输入的字符【ctrl+d打印出来会是-1】
想检验输入是否成功可以 n=scanf(“%d”,&ch);n的值就代表输入成功了几个数据
%*d:输入的这个值不会赋给变量,会直接抛弃
字符型赋值不可用空格、回车进行分割,空格、回车会自动识别成字符,若需要空格、回车进行分割可以使用getchar()对空格、回车这个垃圾字符进行回收,也可使用%*c
%s会将空格、回车视为截止
gets(字符数组);可从键盘输入获取字符填入字符数组(只能输入字符数组长度-1),但很危险,如果输入超过了字符数组长度会导致栈溢出(空格会作为字符存入字符数组)
数组
一维数组
gcc数组下标越界不做检查,数组不做初始化会是随机值,数组不赋值默认为0
数组长度:sizeof(数组)/sizeof(数组数据类型)
二维数组
数组长度计算,行:sizeof(数组)/sizeof(单行数组)
列:sizeof(单行数组)/sizeof(数据类型)
字符数组
字符数组中若没有’\0’,%s会打印到’\0’为止,结果会出现异常
字符数组可填入字符串,会自动分为字符,最后一个字符会是’\0’,若字符串长度不够会用’\0’填充
字符串函数
strlen函数
获取字符串有效长度(看到’\0’截止,’\0’不计入长度)
strcpy函数
字符串拷贝,strncpy(p,p1,n)复制指定长度的字符串,p1前n个字符会被p中前n个字符覆盖
strncat(p,p1,n)函数是在后面填充n个字符
strchr(s1,n)正向查找
strrchr反向查找
isalpha(P)判断是否为字符
isupper(p)判断是否为大写
islower(p)判断是否为小写
shell命令
/bin/bash 换行使用-n
/bin/sh 换行使用/c
free(P)会将P指向的堆空间释放,让P变为空悬指针(野指针),这样很危险,后面要让P指向NULL防止出现问题
指针指向的变量未初始化或者指针操作超越了变量的作用范围(例如数组下标超限),这样的指针是野指针(危险)
局部变量会跟随函数结束而销毁,如果后续还需要使用则要将这个变量变成静态变量(static)
指针在函数中赋值字符串常量无法传递给主函数,会造成内存泄漏,字符串常量赋给指针需要在对应(需要使用的)函数中进行