目录
二进制的产生
机器接收到正电位用1表示,接收到负电位用0表示,只有两种电位由此产生2进制
32位机器表示产生32个电位,64位同理。
c语言的变量
*生命周期指变量存在的时期,作用域指变量起作用的范围
int a=0;//全局变量
int main()
{
int a=1;//局部变量
printf("%d",a);//结果为1
}
注意
1.局部变量和全局变量名字相同时:局部优先。
2.如果跨源文件调用全局变量使用关键字extern 进行外部声明。
3.静态区变量默认初始化为0,局部表量不初始化,默认随机值。
extern int a;
3.出了函数,局部变量被销毁,全局变量还存在。
C语言的数据类型
注意
1. 字节数不同机器略有不同但一定遵循long>=int>=short
2.机器规定char恒为为1字节(byte)
3.内存换算:1tb=1024mb=1024^2kb=1024^3byte=1024^4bit
4.使用不同的数据类型为了节省内存消耗
C语言中的常量
*字符串常量
"abcdefg"
字符串末尾含有"\0"作为结束标志,不显示但占据空间。
求字符长度用函数strlen
int sz=strlen("abcdefg");//结果不包括'\0'
结果为7不包括'\0'
*枚举常量
red pink yellow相当于int 不能修改,在未赋值下相当于0 ,1,2
enum colur
{ red,
pink,
yellow
};
int main()
{ int b=red;//b=0;
return 0;
}
注意
1.常量和变量对应,常量不能更改,可用于数组定义等
2.#define 定义的常量 可用于数组,不可修改,全局使用
3.const 修饰的常变量不是常量
不能被修改,但本质上还是变量,不能用于数组元素个数
const int a=0;//不可修改但不是常量
int arr[a]=0;//报错
转义字符
运用\号使得符号变成新的含义、
常见转义字符
*8进制转义(16进制同理)
1.在字符串中只有8和16进制转义,没有10进制转义
printf("12312323233\n");//结果:12312323233
printf("1233 \123 232 \x53 \n");//1233 S 232 S
123变为8进制数字(即10进制的83)经转义后得到对应ascii的新符号S。
2.8进制数字打印字符有两种方式:''+\ 和直接用%c格式打印8进制数字,在字符串中用第一种。
printf("%c\n", '\123');//S
printf("%c\n", 0123);//S 数字前加0表示8进制数字
计算含转义字符的字符串的长度
转义字符一整个算1个字符,'\0'不算长度
如8进制一般算3位数,遇到有大于等于8的数则数位减少
strlen("1233\123232\x53\n");
//"1233 \123 232 \x53 \n" 10个字符
注意
''和\同时出现,转义的结果是因此字符必须带上''
反转义
把某些特殊字符当成普通字符打印如' \等,取消转义效果
prinf("\\n");//结果为\n
注释
//单行注释
/* 多
行
注
释*/
数据存储
*cpu处理数据越来越快,读写速度更快
*寄存器使用
register int a=0;//建议编译器把变量a放在寄存器中
关键字和函数
typedef 重命名
typedef unsigned int uint
uint age=3//等价 unsigned int age=3
static 静态
改变局部变量储存位置
void fun()
{
static int a=0;
a++;
}//a不会再被定义一次,在原有的值上递增。
断开外部链接属性
修饰全局变量和函数,使得全局变量和函数不能跨源文件使用
全局变量有外部链接属性,通过extern声明能跨源文件使用,用static修饰则外部链接属性消失(函数同理)
pritnf函数
打印格式:
%d:十进制 %lf:双精度 %f:单精度浮点型
%c:字符 %s:字符串
%p:指针
#include<stdio.h>//头文件
printf("%d",10);
指针
储存数据的变量的地址。
内存是存储空间,程序运行时会载入内存,有数据要储存就会申请空间,内存划分成内存单元,并编号,相当于地址。(一个内存单元一个字节)。
32位机器(x86)上指针变量大小4个字节,64位机器8个字节(x64)。
求指针(地址)
int*a=&b//求出b地址