Cpp学习笔记1

变量作用域

作用域是程序的一个区域,一般来说有三个地方可以定义变量:
1.在函数或一个代码块内部声明的变量,称为局部变量。
2.在函数参数的定义中声明的变量,称为形式参数。
3.在所有函数外部声明的变量,称为全局变量。
局部变量和全局变量的名称可以相同,
但是在函数内,局部变量的值会覆盖全局变量的值。
#include <iostream>
using namespace std;
int a;//全局变量
int main ()
{
  // 局部变量声明
  int a=10, b;
  int c;
  // 实际初始化
  a = 10;
  b = 20;
  c = a + b;
  
  cout << c;
  return 0;
}

输出 10
初始化局部变量和全局变量
当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。
定义全局变量时,系统会自动初始化为下列值
int  0 
char  0 
float  0 
double  0 
pointer	NULL 0 

常量

整数常量
整数常量可以是十进制、八进制或十六进制的常量。
前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。
整数常量也可以带后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。
后缀可以是大写,也可以是小写,U 和 L 的顺序任意。

常量
212         // 合法的
215u        // 合法的
0xFeeL      // 合法的
078         // 非法的:8 不是八进制的数字
032UU       // 非法的:不能重复后缀

85         // 十进制
0213       // 八进制 
0x4b       // 十六进制 
30         // 整数 
30u        // 无符号整数 
30l        // 长整数 
30ul       // 无符号长整数
//浮点类型
3.14159       // 合法的 
314159E-5L    // 合法的 
510E          // 非法的:不完整的指数
210f          // 非法的:没有小数或指数
.e55          // 非法的:缺少整数或分数

修饰符类型

C++ 允许在 char、int 和 double 数据类型前放置修饰符。
修饰符用于改变基本类型的含义,所以它更能满足各种情境的需求。

1.数据类型修饰符

下面列出了数据类型修饰符:
signed
unsigned
long
short
修饰符 signedunsignedlongshort 可应用于整型
修饰符 signedunsigned 可应用于字符型
修饰符 long 可应用于双精度型 

修饰符 signedunsigned 也可以作为 longshort 修饰符的前缀 例如:unsigned long int。
C++ 允许使用速记符号来声明无符号短整数或无符号长整数。
您可以不写 int,只写单词 unsignedshortunsignedlongint 是隐含的。
例如,下面的两个语句都声明了无符号整型变量。
unsigned x;
unsigned int y;

2.无有符号整数之间的差别 demo

#include <iostream>
using namespace std;
/* 
 *- 这个程序演示了有符号整数和无符号整数之间的差别
*/
int main()
{
   short int i;           // 有符号短整数
   short unsigned int j;  // 无符号短整数
 
   j = 50000;
 
   i = j;
   cout << i << " " << j;
   return 0;
}
输出 i 为-15536 j 为50000
无符号短整数 50,000 的位模式被解释为有符号短整数 -15,536

3.类型限定符

const	
const 类型的对象在程序执行期间不能被修改改变。

volatile	
修饰符 volatile 告诉编译器不需要优化volatile声明的变量,让程序可以直接从内存中读取变量。
对于一般的变量编译器会对变量进行优化,将内存中的变量值放在寄存器中以加快读写效率。

restrict
由 restrict 修饰的指针是唯一一种访问它所指向的对象的方式。
只有 C99 增加了新的类型限定符 restrict。

存储类

1.存储类定义

C++ 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。

2.存储类列表

auto
register
static
extern
mutable
thread_local (C++11)

从 C++ 17 开始,
auto 关键字不再是 C++ 存储类说明符,
且register 关键字被弃用。
3.static 存储类
static 存储类指示编译器
在程序的生命周期内保持局部变量的存在,
而不需要在每次它进入和离开作用域时进行创建和销毁。
因此,使用 static 修饰局部变量可以在
函数调用之间保持局部变量的值。

static 修饰符也可以应用于全局变量。
当 static 修饰全局变量时,
会使变量的作用域限制在声明它的文件内。

在 C++ 中,当 static 用在类数据成员上时,
会导致仅有一个该成员的副本被类的所有对象共享。

4.extern 存储类
extern 存储类用于提供一个全局变量的引用,
全局变量对所有的程序文件都是可见的。
当您使用 'extern' 时,对于无法初始化的变量,
会把变量名指向一个之前定义过的存储位置。

当您有多个文件且定义了一个可以在其他文件中
使用的全局变量或函数时,
可在其他文件中使用 extern 来得到已定义的变量或函数的引用。
可以这么理解,extern 是用来在另一个文件中
声明一个全局变量或函数。

extern 修饰符通常用于当有两个或多个文件
共享相同的全局变量或函数的时候

运算符

重点 1. 位运算符
二进制 转换
A = 60,且 B = 13
A = 0011 1100
B = 0000 1101
左边第一位为正负
二进制转换 最右边开始20123456次方

A&B = 0000 110012   取交集元素
A|B = 0011 110161   取所有的1 
A^B = 0011 0001-491的非交集  
~A  = 1100 0011-61  翻转,01,10
A << 2 = 1111 0000240  左移移动,右边的补0
A >> 2 = 0000 111115   右移运算符,左边的补0
&  解释: 如果同时存在于两个操作数中,取1,不同时存在取0
|  解释: 如果存在于任一操作数中1,1
^  解释: 两个操作数相同的元素得0;不同的取1 
~  解释: 补码运算符是一元运算符,全部翻转,01,10
<< 解释: 左移运算符。左操作数的值向左移动右操作数位数。
>> 解释: 右移运算符。左操作数的值向右移动右操作数位数。
2.赋值运算符
<<=	左移且赋值运算符	C <<= 2 等同于 C = C << 2
>>=	右移且赋值运算符	C >>= 2 等同于 C = C >> 2
&=	按位与且赋值运算符	C &= 2 等同于 C = C & 2
^=	按位异或且赋值运算符	C ^= 2 等同于 C = C ^ 2
|=	按位或且赋值运算符	C |= 2 等同于 C = C | 2
3.杂项运算符
sizeof	sizeof 运算符返回变量的大小。
例如,sizeof(a) 将返回 4,其中 a 是整数。

Condition  Condition ? X : Y	条件运算符。
如果 Condition 为真 ? 则值为 X : 否则值为 Y。

,	逗号运算符会顺序执行一系列运算。
整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值。

.(点)和 ->(箭头)	
成员运算符用于引用类、结构和共用体的成员。

Cast	强制转换运算符把一种数据类型转换为另一种数据类型。
例如,int(2.2000) 将返回 2&	指针运算符 & 返回变量的地址。
例如 &a; 将给出变量的实际地址。

*	指针运算符 * 指向一个变量。
例如,*var; 将指向变量 var。
4.运算符优先级
下表将按运算符优先级从高到低列出各个运算符
后缀:    		 () [] -> . ++ - -  
一元      		+ - ! ~ ++ - - (type)* & sizeof 
乘除      		* / % 
加减       		+ -  
移位      		<< >> 
关系      		< <= > >= 
相等      		 == != 
位与 AND   		&  
位异或 XOR 		^
位或 OR 		| 
逻辑与 AND		&&  		
逻辑或 OR 		|| 
条件 			?: 
赋值 			= += -= *= /= %=>>= <<= &= ^= |= 
逗号			, 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ob杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值