C++笔记 变量和基本类型

本文深入探讨C++中的数据类型,包括基本类型、复合类型及其位宽,特别关注整型、浮点型及布尔型。同时,详细解析指针的概念、状态与操作,包括初始化、指向常量与常量指针的区别,以及如何生成空指针。此外,文章还介绍了C++11新特性,如auto和decltype关键字的应用。
摘要由CSDN通过智能技术生成

64位操作系统:

bool     8位/1字节
char     8位
short    16位
int      32位
long     32位
float    32位
double   64位

除布尔与字节外整型默认为带符号类型,可以表示正、负、0,添加unsigned为无符号类型,表示大于等于0的值。

当一个表达式中既有无符号数,又有int值时,int值会转换成无符号数。

(原码:第一位为符号位,其余位表示数值,如-1的原码:1,000…0001(两个1之间32个0)。
反码:正数的补码就是其原码;负数的反码为符号位不变,数值位按位取反。如-1的补码为1,111…1110。
补码:正数的补码就是其原码。负数的补码为=反码+1。因此,-1的补码为1,111…111。)

列表初始化

int a = 0;
int a = {0};
int a{0};
int a(0);

花括号在c+11中得到全面应用,当初始化切初始值存在丢失风险时,花括号定义会报错,其余两种转换正确,且确实丢失了部分值。

如果想声明一个变量而非定义,在变量名前添加关键字extern,且不要显示初始化变量。任何包含显示初始化定义的声明即为定义。
变量只能被定义一次,可被声明多次。变量的定义必须且只能出现在一个文件中,而其他用到该变量的文件必须对其进行声明。

指针与引用的不同:
1、指针本身位一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内可以先后指向不同的对象。
2、指针无须在定义时赋初值。

引用没有实际地址,所以不能定义指向引用的指针

指针的4种状态:
1、指向一个对象。
2、指向紧邻对象所占空间的下一个位置。
3、空指针,指针未指向任何对象。
4、无效指针,上述情况之外的其他值。

生成空指针的方法

int *p1 = nullptr;      //c+11新引入
int *p2 = 0;
int *p3 = NULL;      //需要首先#include cstdlib

void*是一种特殊的指针类型,可以存放任意对象的地址。

指向指针的引用

int i = 42;
int *p;
int *&r = p;
r = &i;
&r = 0;

多个文件中出现同名的const变量时,其实等同于在不同文件中分别定义独立的变量。为此,我们只在一个文件中定义const,在其他多个文件中声明并使用它。

extern const int bufSize = fcn();                //定义并初始化一个常量
//另一个文件
extern const int bufSize;

const int ci = 1024;
const int &r1 = ci;      //正确
int &r2 = ci;           //错误

指向常量的指针
不能用于改变其所指对象的值,要想存放常量对象的地址,只能使用指向常量的指针。

const double pi =3.14;
double *ptr = π     //错误
const double *cptr = π         //正确

允许一个指向常量的指针指向一个非常量对象。

const指针
常指针,把*放在const关键字前用以说明指针是一个常量,不变的是指针本身而非指向的值。必须初始初始化。

指向常量的常量指针

const double *const p

顶层const表示任意对象是常量,底层const表示所指对象是一个常量。

C++11新标准规定,允许将变量声明为constexpr类型以便由编译器来验证变量的是否是一个常量表达式。
声明为constexpr的变量一定是一个常量,而且必须用常量表达式初始化。

constexpr int *q =nullptr    //q是一个指向整数的常量指针

类型别名

typedef double wages;
typedef wages base, *p;      //base是double同义词,p是double*同义词

别名声明

using SI = Sales_item;

注意指针别名与const组合时的用法!!!

auto
c+11新引入,auto让编译器通过初始值来推算变量的类型,因此auto定义的变量必须有初始值。
auto能在一条语句中声明多个变量,但所有变量的初始基本类型必须一样,因为一条声明语句只能有一个基本数据类型。
auto一般会忽略掉顶层const,同时底层const会被保留。
如果需要推断出auto类型是一个顶层const,需要明确指出

const auto f = ci;

decltype
c+11新引入,从表达式的类型推断要定义的变量类型,但不用该表达式的值初始化变量。
对于decltype所用的表达式来说,如果变量名加上了一对括号,则得到的结果永远是引用。

预处理器:确保头文件多次包含仍能安全工作的常用技术,在编译之前执行的一段程序,可以部分地改变我们所写的程序。
头文件保护:
#define指令把一个名字设定为预处理变量;#ifdef当且仅当变量已定义时为真;#ifndef当且仅当变量未定义时为真。一旦检查结果为真,则执行后续操作至#endif为止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值