基础部分笔记


基础部分笔记

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)

指针在函数中赋值字符串常量无法传递给主函数,会造成内存泄漏,字符串常量赋给指针需要在对应(需要使用的)函数中进行


文章作者: hhs1231
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hhs1231 !
评论
  目录