hello world
cpp
#include <iostream>
using namespace std;
int main() {
cout << "hello world" << endl;
return 0;
}
其中文件开头需要导入 iostream
基础库,c++ 中可以省略.h 后缀,所以可以不用写.h
#include 表示引入某个库的代码
而 using namespace std
表示 使用 std
这个命名空间 因为,我们接下来的使用的cout
输出函数,是在 std
这个命名空间中,namespace
主要是用来区分 不同头文件的中的相同函数名,也就说,接下来使用的 cout 函数是在 std 中
如果我们不声明 std 命名空间的话,需要手动表示这个函数是属于哪个命名空间中,因为他在外面的空间中找不到,因此需要下面这样写
cpp
#include <iostream>
int main() {
std::cout << "hello world" << std::endl;
return 0;
}
所以,我们导入的std
命名空间后,可以省略 cout 前面的 std::
这种前缀
endl
表示 换行输出
输入输出
cpp
#include <iostream>
using namespace std;
int main() {
int num;
cin >> num;
cout << "你输入的数字是:" << num << endl;
return 0;
}
cin
表示从控制台进行输入参数 cout
表示在控制台打印
函数值传递,指针传递,引用传递
cpp
#include <iostream>
using namespace std;
/*
引用
相当于 b 也是指向的a 变量, 类似于指针这种 a, b 变量都指向 10这个值
*/
// 值传递
void swap1(int x, int y) {
int temp = x;
x = y;
y = temp;
cout << "值传递:x=" << x << ",y=" << y << endl;
}
// 指针传递
void swap2(int* x, int* y) {
int temp = *x;
*x = *y;
*y = temp;
cout << "指针传递:x=" << *x << ",y=" << *y << endl;
}
// 引用传递
void swap3(int &x,int &y) {
int temp = x;
x = y;
y = temp;
cout << "引用传递:x=" << x << ",y=" << y << endl;
}
int main() {
int a = 10;
int &b = a;
//cout << b << endl;
b = 20;
//cout << a << endl;
int x = 120;
int y = 200;
swap1(x, y);
cout << "值传递后:x=" << x << ",y=" << y << endl;
swap2(&x, &y);
cout << "指针传递后:x=" << x << ",y=" << y << endl;
swap3(x, y);
cout << "引用传递后:x=" << x << ",y=" << y << endl;
return 0;
}
引用传递实际上底层是 指针常量 ,无法再次修改,相当于是 指针的一个语法糖的使用,简化指针在函数传递的书写
内存管理
在函数体内声明的局部变量,会被分配在栈当中,函数运行完毕,则释放空间,因为,不要在函数体内返回引用变量,因为会被系统回收,
我们可以new
变量,使用new
关键词后,变量会被创建在 堆中,语法如下
cpp
void f() {
int * p = new int(10);
}
返回的是指针类型的变量
如果使用了 new 关键词,变量不会被系统回收,只能手动释放变量
cpp
delete p;
这样就能释放 p 变量
函数默认参数
cpp
int func(int a, int b = 10, int c = 10) {
return a + b + c;
}
//1. 如果某个位置参数有默认值,那么从这个位置往后,从左向右,必须都要有默认值
//2. 如果函数声明有默认值,函数实现的时候就不能有默认参数
int func2(int a = 10, int b = 10);
int func2(int a, int b) {
return a + b;
}
int main() {
cout << "ret = " << func(20, 20) << endl;
cout << "ret = " << func(100) << endl;
system("pause");
return 0;
}
struct 和 class 区别
在 C++中 struct 和 class 唯一的区别就在于 默认的访问权限不同
区别:
- struct 默认权限为公共
- class 默认权限为私有
cpp
class C1
{
int m_A; //默认是私有权限
};
struct C2
{
int m_A; //默认是公共权限
};
int main() {
C1 c1;
c1.m_A = 10; //错误,访问权限是私有
C2 c2;
c2.m_A = 10; //正确,访问权限是公共
system("pause");
return 0;
}