gcc bool.c -wall 可以将编译信息显示出来
%d(十进制) %x(十六进制),%o(八进制0),%e(科学计数法) ,%s(打印字符串)
gcc -E define.c -o define.i生成预处理后的文件
:vsp双频道
%#x #代表自动增加0x前缀
条件运算符“?:”
<表达式1>?<表达式2>:<表达式3>(if表1输出表2else输出表3)
Eq x>=y?x+18:y-100
逗号运算符
Eq z = (x+=5,y=x+0.2)
Sizeof运算符(看数据类型占的字符数)
C运算符是有优先级的
I/O操作由函数实现 #include
枚举类型:eg enum weekday{sun,mon,tue} a;
循环:goto,while,do—while,for
pow计算n次方和 (man pow可以看其中的参数)
Pus(“”)打印字符
scanf("%d", &n) 读入一个整数
!= 0 读入的整数 n 有效
gcc bool.c -wall -lm 有函数输入时,为了使得编译器可以识别,编译的时候要加上。
c语言对数组不作越界检查,使用时要注意
数组定义长度的时候可以用变量
二位数组声明事列数不能省略,行数可以省略。
二维数组按照行序走,原因:内存是一维的
(个人认为数组和for循环很配)
字符数组是元素的数据类型为字符类型的数组。
C语言中无字符串变量
\xhh表示十六进制数代表的符号
\ddd表示八进制的
EOF全称是End Of File(C语言标准函数库中表示文件结束符),通常在文本的最后表示资料结束。C语言中数据都是以字符的ASCII代码值来存放的。ASCII代码值得范围是0~127,不可能出现-1,因此可以用EOF作为文件结束标志,我们可以把EOF作为‘-1’理解
Isalpha() 检查是否为字母字符
Isupper() 检查是否为大写字母字符
Islower() 检查是否为小写字母字符
Isdigit() 检查是否为数字
C程序设计中使用指针可以:
使程序简洁、紧凑、高效
有效地表示复杂的数据结构
动态分配内存
得到多于一个的函数返回值
在计算机内存中,每一个字节单元,都有一个编号,称为地址
在C语言中,内存单元的地址称为指针,专门用来存放地址的变量,称为指针变量
Int *p = &a(int *p; p=a;)定义中的*p是个类型,而实际应用的时候*p表示的就是地址中的内容
指针指向的内存区域中的数据称为指针的目标。
指针指向的区域是程序中的一个变量的内存空间,则这个变量称为指针的目标变量。
指针运算的种类是有限的,它只能进行赋值运算,算术运算和关系运算
指针和零进行等于或不等于的关系运算,判断指针是否为空。
指针变量可以指到数组后的内存单元
数组的指针是指数组在内存中的其实地址 eq double x[8]其中,x是x数组的起始地址
X[i]、*(px+i)、*(x+i)和px[i]具有完全相同的功能:访问数组第i+1个数组元素
虚拟机打开终端快捷键:首先在桌面任意空白处,按CTRL+ALT+T
一级指针可以打开二维数组。
二维数组名代表数组的起始地址,数组名+1,是移动一行元素。因此,二维数组名常被称为行地址。例如a[i]
行指针(数组指针)int a[2][3],int *p[3]
字符指针:初始化字符指针是把内存中字符串的首地址赋予指针,并不是把该字符串复制到指针中。(局部变量)
在c编程中,当一个字符指针指向一个字符串常量时,不能修改指针指向的对象的值(静态变量)
Segmentation fault 一般是和内存有关的问题
指针数组:由若干个具有相同存储类型和数据类型的指针变量构成的集合。顾名思义搞数组的时候用的多。
指针数组名相当于二级指针。
把一个指向指针变量的指针变量,称为多级指针变量。
Void指针是一种不确定数据类型的指针变量,它可以通过强制类型转换让该变量指向任何数据类型的变量
(常量化指针变量及其目标表达式,使得既不可以修改<指针变量>的地址,也不可以通过*<指针变量名称>修改指针所指向变量的值)
函数是一个完成特定功能的代码模块,其程序代码独立,通常要求有返回值,也可以是空值。
<数据类型>是整个函数的返回值类型。
函数的参数传递
复制传递方式 地址传递方式
指针函数是指一个函数的返回值为地址量的函数
递归函数是指一个函数的函数体中直接或间接调用了该函数自身
函数指针是用来存放函数的地址,这个地址是一个函数的入口地址