运算符
算数运算符 (与C一致,略)
关系运算符(与C一致,略)
逻辑运算符(与C一致,略)
赋值运算符(与C一致,略)
杂项运算符(似乎与C一致,还是记录一下)
重要杂项运算符:
运算符 | 描述 | examle |
---|---|---|
sizeof | 返回变量的大小 | int hzy ,sizeof(hzy) 将返回4 |
condition?X:Y | 若condition为真,则值为X,否则为Y | 略 |
, | 执行一系列运算,整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值 | 略 |
.(点)和->(箭头) | 用于引用类、结构和共用体成员 | 略 |
cast | 强制转换,将一种数据类型转换为另一种数据类型 | int(2.2000) 将返回2 |
& | 指针运算符&返回变量的地址 | 略 |
* | 指针运算符*指向一个变量 | 略 |
* sizeof
语法:
sizeof (data type);
- condition?X:Y
语法:
Exp1 ? Exp2 : Exp3;
Exp1若为真,则计算Exp2的值,且将计算结果当做整个表达式的值,否则计算Exp3的值。该语句可以用来替代简单的if-else语句。
* ,
看下面这个例子:
#include <iostream>
using namespace std;
int main()
{
int i, j;
j = 10;
i = (j++, j+100, 999+j);
cout << i;
return 0;
}
最终i的值为1010,原因如下:
j的初值为10,先自增,为11,然后执行j+100,值为111,但是该值不赋予j,因此j还是11,最后999+11=1010,把该值赋予i。
- .和->
可以参考如下的例子:
struct Employee {
char first_name[16];
int age;
} emp;//结构体emp中含有的成员为first_name数组和age
strcpy(emp.first_name, "zara");//将“zara”赋给emp中的first_name
strcpy(p_emp->first_name, "zara");//p_emp为指针,指向类型为Employee的对象,将“zara”赋给对象emp的first_name成员
访问结构的成员时使用点运算符,而通过指针访问结构的成员时使用箭头运算符。
* cast
(type) expression;
- &
&为取地址运算符,返回操作数的内存地址。 - *
*为间接寻址运算符,返回操作数所指定地址的变量的值。
可以参考下列代码:
#include <iostream>
using namespace std;
int main ()
{
int var;
int *ptr;
int val;
var = 3000;
// 获取 var 的地址
ptr = &var;
// 获取 ptr 的值
val = *ptr;
cout << "Value of var :" << var << endl;
cout << "Value of ptr :" << ptr << endl;
cout << "Value of val :" << val << endl;
return 0;
}
结果如下:
Value of var :3000
Value of ptr :0xbff64494
Value of val :3000
注意仔细体会上述值的差别。
运算符的优先级
后缀>一元>乘除求余>加减>移位>关系>相等>位与>位异或>位或>逻辑与>逻辑或>条件>赋值>逗号
循环
基本与C一致。
C++11允许基于范围的for循环:
int my_array[5] = {1, 2, 3, 4, 5};
// 每个数组元素乘于 2
for (int &x : my_array)//:前面表示用于迭代的变量,后面表示循环的范围
{
x *= 2;
cout << x << endl;
}
// auto 类型也是 C++11 新标准中的,用来自动获取变量的类型
for (auto &x : my_array) {
x *= 2;
cout << x << endl;
}
#include<iostream>
#include<string>
#include<cctype>
using namespace std;
int main()
{
string str("some string");
// range for 语句
for(auto &c : str)
{
c = toupper(c);
}
cout << str << endl;
return 0;
}
上述代码中,toupper函数为将小写转换为大写。代码遍历字符串,将所有字符变为大写然后输出。
goto对应需要加label作为标识符,goto语句可以用于跳出深嵌套。
for(::)
可以用于表示一个无限循环
Tips:按下CTRL+C可以终止一个无限循环