CPP 基础

CPP 基础

C 语言基础

C 语言关键字

char, short, int, long, float, double, struct, union, enum, void, const, signed, unsigned, sizeof, typedef, auto, static, register, extern, if, else, switch, case, default, for, while, do, break, continue, return

基本数据类型

  • char, short, int, long, long long, float, double, void, struct, union, enum等。
  • 在基本数据类型前加unsigned表示无符号类型,最高位不作为符号位,而是数值位。
  • 整数默认是int,小数默认是double。所以定义long类型时最好在数字末尾加l, L,定义float类型最好在数字末尾加f, F
基本数据类型 字节数 范围
char 1 -128~127
short 2 -32768~32767
int 2 或 4 -231~231-1
long 4 -231~231-1
long long 8 -264~264-1
float 4
double 8

变量的存储类型

变量除了有数据类型,还有另外一个重要属性,存储类型。数据类型决定了变量的大小,而存储类型决定了变量的生命周期和可见性。

C 语言中,变量的存储类型有 4 种,auto, static, register, extern,一般使用的只有前两个。

  • auto,默认存储类型。auto 只能用在函数内,修饰局部变量。
  • static,全局变量默认以 static 修饰。当修饰局部变量时,必须且只能被初始化一次
  • register,用于定义存储在寄存器中而不是 RAM 中的局部变量,用于运算要求高的变量。
  • extern,用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。

算数运算符

  • +, -, *, /, %, ++, --, <, <=, >, >=, ==, !=, &&, ||, !, &, |, ~, ^, >>, <<, +=, sizeof, ., [], *, (), ?:, 强制类型转换
  • a^b=c, 则a^c=b, b^c=a,这一规律广泛运用于密码学。
  • a>>n,相当于a/(2^n)
    • 有符号数,右移时最高位补符号位。
    • 无符号数,右移时最高位补 0。
  • a<<n,相当于a*2^n,最低位直接补 0。

数组与字符串

  • int a[10]={1, 2, 3},前 4 个数分别为 1, 2, 3,后面的数均初始化为 0。
  • 字符串的末尾必须是\0,占一个字节。

指针

变量都存放在从某个内存地址开始连续的若干个字节中。

  • 开始的内存地址:指针。
  • 连续的若干字节:指针对应类型的字节长度。
  • int *p = (int *)1000,指针指向内存地址为 1000 的位置,管辖后面连续的 4 个字节。
指针变量的大小

指针变量是一种数据类型,它的大小均为sizeof(T *) = 4,故无论指针变量指向的是何种数据类型,它的大小均为 4 字节。

这是因为当今主流的 CPU 为 32 位,寻址范围是 2^32=4G,所以指针变量只需要 32 位即可。当然对于 64 位 CPU,编译器产生的指针长度也就是sizeof(T *) = 8

主机字节顺序
  • 大端:低地址存放高位数据,这种最为直观。
  • 小端:低地址存放低位数据,在程序,网络中,一般采用的是小端。

例如,将0x1234bacd以不同的方式存储:

地址 大端 小端
0x0000 12 cd
0x0001 34 ba
0x0002 ab 34
0x0003 cd 12
unsigned short a = 0x1234;
char *p = (char *)&a;
for(int i=0;i<2;i++){
   
	printf("%2x\n", *(p+i));
}

如果short a = 0xf234,在输出首字节的0xf2时,会出现fffffff2而不是f2,猜测可能是由于printf()函数在输出时将char自动转换成了 4 字节的int造成的,因为%x对应的就是整型,整型默认是int

指针运算
  • 同类型的指针可以比较。
  • 同类型的指针可以相减。p2-p1 = (p2-p1)/sizeof(T)
  • 指针可以和整型常量相加,相减。p ± n = p ± n*sizeof(T)
  • 指针可以自增,自减。
指针与动态分配内存
  • 分配内存:int *p = new int, int *p = new int[10]
  • 释放内存:delete p, delete[] p
指针类型
  • 空指针,也称野指针,未指向任何地址的指针。p = NUL
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值