C++新手入门-4

C++新手入门-4,第1张

C++新手入门-4
## C++新手入门--4
C++存储类

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)
  • 逗号运算符,(顺序执行一系列运算)
    代码:
#include
using 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
    代码:
#include
using 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值)
    代码:
#include
using 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;
}

结果:

C++中的运算符优先级
#include
using 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;
}

结果:

while循环

代码:

#include
using namespace std;
int main() {

	//局部变量声明
	int a = 10;

	//while循环执行
	while (a < 20) {
		cout << "a = " << a << endl;
		a++;
	}

	return 0;
}

结果:

for循环

代码:

#include
using namespace std;
int main() {
	//for循环遍历
	for (int a = 10; a < 20; a++) {
		cout << "a的值为:" << a << endl;
	}
	return 0;
}

结果:

基于范围的for循环

代码:

#include
using 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语句遍历一个字符串,并将所有字符全部变为大写,然后输出结果

do…while循环

可以确保至少执行1次循环,在循环体尾部检查条件
代码:

#include
using namespace std;
int main() {

	//局部变量声明
	int a = 10;

	//do循环执行
	do {
		cout << a << endl;
		a++;
	} while (a < 20);

	return 0;
}

结果:

嵌套循环求质数(没太搞懂)

代码:

#include
using 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;
}

结果:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5433654.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存