Cpp入门基础知识
一,命名空间
首先应该明白数据在内存中的存储位置,如下图所示;
理解域为一个代码框,一个变量的作用域为一个代码框,在主函数外定义的无框变量的作用域是全局即整个程序。
在任何一个域中都可以使用全局变量,所以应尽量减少使用全局变量,会让程序不稳定。
在不同的域可以重名定义变量,如下面的变量a,输出时使用该域中的变量。
namespace定义一个域,using将这个域释放出来,都为全局变量;
域可以进行嵌套使用,输出时应使用域作用限定符::
#include <iostream>
using namespace std;//使用命名空间std,将std释放出来
namespace AA
{
int a = 10;
int b = 20;
}
namespace BB1 //命名空间的嵌套使用
{
int i = 1;
namespace BB2
{
int i = 2;
}
}
int a = 0;//全局变量 存放在静态区中
int main()
{
int a = 30;
cout << "hello world" << endl;
cout << a << endl;
cout << BB1::BB2::i << endl;// ::域作用使用限定符
return 0;
}
二,函数重载及省缺参数
在C++中存在函数重载,即函数可以重名。但这俩个函数必须参数类型不同(数量,种类,顺序都可)来区别与使用函数。
在程序编译时将俩个函数名分别变为_z3funif和_z3funfi用以区分,3是函数名个数,i f分别为参数类型的首字母。
注意函数的返回值类型不能用于函数的区分。
#include <iostream>
using namespace std;
float fun(int a, float b)
{
return a + b;
}
float fun(float a, int b)
{
return a * b;
}
int main()
{
float a = fun(1, 2.0);
float b = fun(1.0, 2);
cout << a;
cout << b;
return 0;
}
函数的实参可以省略不写,但需在形参中定义初始值,省参只能从左往右。
分为全省参数和半省参数
//函数省缺参数
int f(int a = 10, int b = 20)
{
return a + b;
}
int main()
{
int c = f(20);
cout << c << endl;//40
return 0;
}
三,指针和引用
引用就是给变量(对象)取了一个别名,共用同一个内存空间。在同一个域中名字不能相同。
const的用法:对const修饰的变量要用常引用,对常量也用常引用,隐身类型转换时开辟了一个具有常性的临时变量要用const修饰。
void f(int **pptr)
{
*pptr = (int*)malloc(4);
}
void f(const int *&ptr)//不改变加const
{
ptr = (int*)malloc(4);
}
int main()
{
int a = 10;
int& b = a;
const int c = 20;
const int& b2 = c;//需要使用常引用
const int& b3 = 3;//常量具有常性,可以使用常引用
double d1 = 2.0;
const int& b4 = d1;//隐式类型转换
int * p = NULL;
f(p);//1.函数内改变 2.提高效率
return 0;
}
函数传参是使用引用可以提高效率。
引用作为返回值
int& Add(int a, int b)
{
int ret = a + b;
return ret;
}
int add(int a, int b)
{
int ret = a + b;
return ret;
}
int main()
{
int& ret = Add(1, 2);
cout << ret << endl;
Add(2, 4);
cout << ret << endl;
return 0;
}
当返回的变量出了作用域还在时可以使用引用。引用的本质也是地址是指针。引用相比指针不需要赋初值,更加灵活。