## C++新手入门--4C++存储类
C++ 存储类:定义C++程序中变量/函数的范围和生命周期
包括:
- auto
- register
- static
- extern
- mutable
- thread_local
没有详细看
C++运算符 算数运算符+,-,*,/,%,++,–
关系运算符==,!=,>,<,>=,<=
逻辑运算符&&,||,!
位运算符&【与】,|【或】,^【异或】,~【非】
假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:
A = 0011 1100
B = 0000 1101
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
<<【2进制左移】,>>【2进制右移】
二进制左移运算符。将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。【A << 2 将得到 240,即为 1111 0000】
二进制右移运算符。将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。【A >> 2 将得到 15,即为 0000 1111】
=,+=,-=,*=,/=,%=,<<=,>>=,&=,|=,^=,~=,
杂项运算符- sizeof运算符(返回变量的大小)
- Condition?X:Y(条件运算符, Condition为真,值为X,否则值为Y)
- 逗号运算符,(顺序执行一系列运算)
代码:
#includeusing namespace std; int main() { int i, j; j = 10; i = (j++, j + 100, 999 + j); cout << i; return 0; }
结果:
过程:
依次求解表达式1(j++)==> j=11,2(j+100) ==>11+100 = 111,3(999+j) ==> 11+999 = 1010;
将表达式3的值赋给i
i = 1010
- 成员运算符.和->(访问结构的成员用.点运算符;通过指针访问结构的成员时,使用->箭头运算符【没弄明白】)
- 强制转换符Cast
代码:
#includeusing namespace std; int main() { double a = 21.09399; float b = 10.20; int c; c = (int)a; cout << "Line 1 - Value of (int)a is :" << c << endl; c = (int)b; cout << "Line 2 - Value of (int)b is :" << c << endl; return 0; }
结果:
- 指针运算符&(返回变量的地址)
- 指针运算符*(返回指针变量对应的value值)
代码:
#includeusing namespace std; int main() { int var; int *ptr; //指针,指向ptr的地址--是一个地址变量 int val; var = 3000; //获取var的地址 ptr = &var;//ptr就是个指针变量,指针变量只能存地址,所以对应的值也应该是地址值,&就是获取变量的地址 //获取ptr的值 val = *ptr;//val是个变量,存的是对应地址的变量值,*号是作用于指针变量,获取对应地址的变量值 cout << "Value of var :" << var << endl;//存的是变量var的值 cout << "Value of ptr :" << ptr << endl;//存的是指针变量ptr所存的地址值 cout << "Value of val :" << val << endl;//存的是指针变量所存的地址的value值 return 0; }
结果:
#includeusing namespace std; int main() { int a = 20; int b = 10; int c = 15; int d = 5; int e; e = (a + b) * c / d;//(30*15)/5 cout << "(a + b) * c / d的值是" << e << endl; e = ((a + b) * c) / d;//(30*15)/5 cout << "((a + b) * c) / d的值是" << e << endl; e = (a + b) * (c / d);//30*(15/5) cout << "(a + b) * (c / d)的值是" << e << endl; e = a + (b * c) / d;//20+(150/5) cout << "a + (b * c) / d的值是" << e << endl; return 0; }
结果:
代码:
#includeusing namespace std; int main() { //局部变量声明 int a = 10; //while循环执行 while (a < 20) { cout << "a = " << a << endl; a++; } return 0; }
结果:
代码:
#includeusing namespace std; int main() { //for循环遍历 for (int a = 10; a < 20; a++) { cout << "a的值为:" << a << endl; } return 0; }
结果:
代码:
#includeusing namespace std; int main() { int my_array[5] = { 1,2,3,4,5 }; for (int &x:my_array) {//x的地址指向my_array的地址?反正x代表my_array的全部元素 x *= 2;//对x *** 作其实是对my_array *** 作 cout << x << endl; } //auto类型是C++11新标准中的,用来自动获取变量的类型 for (auto &x : my_array) {//x的地址再次指向my_array的地址 x *= 2;//对x操作就是对my_array操作 cout << x << endl; } return 0; }
结果:
上面for述句的第一部分定义被用来做范围迭代的变量,就像被声明在一般for循环的变量一样,其作用域仅只于循环的范围。而在":"之后的第二区块,代表将被迭代的范围。
代码:
#include#include using namespace std; int main() { string str("some thing"); //range for语句 for (auto &c : str) {//c的地址指向str c = toupper(c);//修改c就是修改str } cout << str << endl; return 0; }
结果:
上面的程序使用Range for语句遍历一个字符串,并将所有字符全部变为大写,然后输出结果
可以确保至少执行1次循环,在循环体尾部检查条件
代码:
#includeusing namespace std; int main() { //局部变量声明 int a = 10; //do循环执行 do { cout << a << endl; a++; } while (a < 20); return 0; }
结果:
代码:
#includeusing namespace std; int main() { int i, j; for (i = 2; i < 100; i++) {//自然界最小的质数是2 for (j = 2;j<=(i/j);j++) { if (!(i % j)) { break; } } if (j > (i / j)) { cout << i << "是质数n"; } } return 0; }
结果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)