c++基本语法、用法。
参考文章:https://blog.csdn.net/chenlong_cxy/article/details/127166206
// 导入iostream输入输出流
#include
// std命名空间是C++中标准库类型对象的命名空间
using namespace std;
int main(){
int a;
cin >> a;
cout<< a << endl;
}
#include
using namespace std;
int main(){
int a, b, c;
scanf("%d-%d-%d", &a, &b, &c);
printf("Hello, World!\n");
printf("b is %d", b);
}
引用命名空间N的某个成员
//使用using将命名空间中的成员引入
#include
namespace N
{
int a;
double b;
}
using N::a;//将命名空间中的成员a引入
int main()
{
a = 10;//将命名空间中的成员a赋值为10
printf("%d\n", a);//打印命名空间中的成员a
return 0;
}
引用命名空间N的所有成员
//使用using namespace 命名空间名称引入
#include
namespace N
{
// 在命名空间中,既可以定义变量,也可以定义函数
int a;
double b;
int Add(int x, int y)
{
return x + y;
}
}
using namespace N;//将命名空间N的所有成员引入
int main()
{
a = 10;
printf("%d\n", a);
return 0;
}
整型(int、short、long、long long)
浮点型(float、double)
字符型(char)
布尔型(bool)
// 数组
int myArray[5] = {1, 2, 3, 4, 5};
// 字符串
char myString[] = "Hello, world!"; // 定义一个字符数组,包含字符串"Hello, world!"
const char* myConstantString = "Hello, world!"; // 定义一个常量指针,指向字符串"Hello, world!"(需要手动管理内存,在编译时确定其长度)
std::string myStringObj = "Hello, world!"; // 定义一个字符串对象,包含字符串"Hello, world!"(自动内存管理,可动态调整长度)
指针就是变量的内存地址。
#include
using namespace std;
int main() {
int a = 10; // 定义变量a并赋值10
int *p = &a; // 定义一个整型指针p,并将其指向a的内存地址
// 重点:*p = &a 相当于把*p和a绑定,*p、a其中一个内存地址变化,另一个也会跟着变
cout << "a的值:" << a << endl; // 输出a的值
cout << "a的内存地址:" << &a << endl; // 输出a的内存地址
cout << "p指向的值:" << *p << endl; // 输出p指向的值(即a的值)
int b = 20; // 定义一个整型变量b并赋值为20
*p = b; // 将p指向的值(即a)修改为b的值
cout << "修改后的a的值:" << a << endl; // 输出修改后的a的值(即b的值)
return 0;
}
注意:上面的p表示单纯的地址,而*p表示指向a的地址空间
如下代码,p = &b 不会改变a的值, *p = b 会改变a的值,
#include
using namespace std;
int main(){
int a = 10;
int *p = &a;
cout << "p:" << *p << endl;
int b = 20;
p = &b;
cout << "a的值:" << a << endl; // a = 10
cout << "*p的值:" << *p << endl; // *p = 20
return 0;
}
p = &b (地址变化) 与 *p = b (仅数值变化) 执行后内存地址对比
int* p1 = NULL;
int* p2 = 0;
int* p3 = nullptr; // p3指向空地址(c++11)
#include
using namespace std;
int main()
{
int a = 10;
int& b = a;//给变量a去了一个别名,叫b (引用在定义时必须初始化)
cout << "a = " << a << endl;//a打印结果为10
cout << "b = " << b << endl;//b打印结果也是10
b = 20;//改变b也就是改变了a
cout << "a = " << a << endl;//a打印结果为20
cout << "b = " << b << endl;//b打印结果也是为20
int c = 0;
b = c;//这里并不会改变b的地址,只会改变b这个地址存储的值
return 0;
}
常引用
int main()
{
const int a = 10;
//int& ra = a; //该语句编译时会出错,a为常量
const int& ra = a;//正确
//int& b = 10; //该语句编译时会出错,10为常量
const int& b = 10;//正确
return 0;
}
用指针写的交换函数
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
用引用写的交换函数
void swap(int& a, int& b)
{
int tmp = a;
a = b;
b = tmp;
}
#include
using namespace std;
int main() {
int a = 10;
if (a > 5) {
cout << "a大于5" << endl;
} else if (a > 3) {
cout << "a在3到5之间" << endl;
} else {
cout << "a小于等于3" << endl;
}
return 0;
}
c++98 for循环
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
cout << arr[i] << " ";
}
c++11 for循环
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//循环拿到引用
for (auto& e : arr)
{
cout << e << " ";
}
//循环自动类型
for (auto e : arr)
{
cout << e << " ";
}
while 与 do while
int j = 0;
while (j < 10) {
cout << "j的值为:" << j << endl;
j++;
}
int k = 0;
do {
cout << "k的值为:" << k << endl;
k++;
} while (k < 10);
循环中可以使用break和continue跳过、结束循环。
#include
using namespace std;
void Print(int a = 0)
{
cout << a << endl;
}
int main()
{
Print();//没有指定实参,使用参数的默认值(打印0)
Print(10);//指定了实参,使用指定的实参(打印10)
return 0;
}
缺省参数(必须从右往左依次给出,不能间隔着给)
缺省值必须是常量或者全局变量。
//正确示例
int x = 30;//全局变量
void Print(int a, int b = 20, int c = x)
{
cout << a << endl;
cout << b << endl;
cout << c << endl;
}
c语言中不支持函数重载,C++中支持
同名函数,形参不同
#include
using namespace std;
int Add(int x, int y)
{
return x + y;
}
double Add(double x, double y)
{
return x + y;
}
int main()
{
cout << Add(1, 2) << endl;//打印1+2的结果
cout << Add(1.1, 2.2) << endl;//打印1.1+2.2的结果
return 0;
}
inline int add(int a, int b) {
return a + b;
}
int main() {
int x = 3;
int y = 4;
int sum = add(x, y);
std::cout << "The sum is: " << sum << std::endl;
return 0;
}
在这个例子中,add函数被定义为内联函数,因此在main函数中调用它时,它的代码会被直接插入到main函数中,而不是像普通函数那样通过函数调用。