上个学期因为因为加入了学校教官队,还有各种各样的事情,导致博客没怎么写过,现在开始重新补一下。然后因为之前写博客就巨细无遗的把所有内容都写下来,感觉没有必要,时间成本也比较高,现在就把各个知识点,我记的写下来。
C语言是一门面向过程的计算机编程语言。
C语言程序由函数和语句组成,其中mian函数是主函数是程序的入口,有且仅有一个。
C语言中最简单的数据类型包括整型、实型(浮点型)、字符型。
生活中不变的量在C语言中称为常量,变的量称为变量。
常量分为以下4种:字面常量、const修饰的常变量、#define定义的标识符常量、枚举常量。
枚举常量eg:
enum Sex
{
MALE,//0
FEMALE,//1
SECRET//2
};
从0开始,往下递增。
字符串放在数组之中(C语言没有字符串类型),用双引号引起来的是字符串。
strlen 求字符串长度的函数,不包括结束字符(null)。
sizeof 是一个单目操作符,计算变量所占内存空间的。
strlen的返回类型是无符号整型。
对于sizeof而言,因为缓冲区已经用已知字符串进行了初始化,其长度是固定的,所以sizeof在编译时计算缓冲区的长度。也正是由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。
% 取模操作符,只能用于整型
& 按位与操作符,遇假则假
| 按位或操作符,遇真则真
^ 按位异或操作符,相同则假,相异则真
&& 逻辑与(并且)
|| 逻辑或(或者)
只要是整数,内存中储存的都是二进制的补码
正数的原码,反码,补码都相同
负数的 原码是直接按照正负写出的二进制序列
反码是原码的符号位不变,其他按位取反
补码是反码加一
逗号表达式是从左往右执行,整个表达式的结果是最后一个表达式的结果
auto——自动,定义自动变量,自动创建,自动回收,所有局部变量都为自动变量(一般省略auto)
const——常属性,修饰变量和指针
extern——声明外部符号,(如果要使用外部文件的全局变量,需用extern声明)
register——寄存器
signed——有符号的
unsigned——无符号的
static——静态的
typedef——类型定义,重定义
typedef unsigned int u_int;
//之后代码中,可以用u_int代替unsigned int ,减轻工作量
register:寄存器关键字
在计算机的存储中:
寄存器 |
高速缓存 |
内存 |
硬盘 |
网盘 |
从下往上,空间越小,造价越高,速度越快。
register int a =10;//建议把a放入寄存器
寄存器不能取地址
static:静态的,修饰局部变量、全局变量、函数变量。
#include
void test()
{
static int a = 1;//每一次调用的a,都是上一次函数留下的,并不会重置
a++;
printf("%d",a);
}
int main()
{
int i = 0;
while(i<10)
{
test();
i++;
}
return 0;
}
static修饰局部变量:static修饰局部变量的时候,其实改变了变量的存储类型,从而使得静态的局部变量出了自己 的作用域也不会销毁,相当改变了这个局部变量的生命周期。
static修饰全局变量:一个全局变量在整个工程的其他文件內部能被使用,是因为全局变量具有外部链接属性,当一个全局变量被static修饰时,这个变量的外部链接属性就变成了内部链接属性。使得这个全局变量只能在自己所在的源文件内部使用,其他文件不能在使用,作用域变小了,生命周期没变。
static修饰函数变量:static修饰函数的时候,函数本来也是具有外部链接属性,被static修饰后,变成了内部链接属性。
指针变量的大小取决于地址的大小
32位平台下地址是32个bit位
64位平台下地址是64个bit位
struct Stu
{
char name[20];//名字
int age; //年龄
char sex[5]; //性别
char id[15]; //学号
};
struct Stu s = {"张三", 20, "男", "20180101"};
//.为结构成员访问操作符
printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id);
//->操作符
struct Stu *ps = &s;
printf("name = %s age = %d sex = %s id = %s\n", ps->name, ps->age, ps->sex, ps-
>id);
之后会慢慢把C语言的全补上。