
命名空间 using namespace 可以嵌套 允许重名 最后编译器会整合到一起域作用限定符 ::namespace manba { //可以定义变量 函数 以及自定义类型 int a; int strlen(int* a, int size); //可以嵌套 namespace out { int a; int string(int a) { return a; } } } int manba::strlen(int* a, int size) { return size; }缺省参数//定义只关心是否传参 但VS好像给他优化掉了 void Init(int* a, int capa 5); void Init(int* a, int capa) { a (int*)malloc(sizeof(int) * capa); printf(%d, capa); } void test1() { printf(test1\n); int* a NULL; Init(a); }函数重载//C允许函数重名 double string(int a, double b) { return a b; } double string(double a) { return a; } //原理列举gcc C对函数的命名规则 // _Z 函数名长度 函数名 参数类型首字母且区分顺序 // 这个命名跟返回值没太大关系引用//给类型起别名 int a; //起别名必须直接初始化 int b a; //做参数 void Swap(int a, int b) { int tmp a; a b; b tmp; printf(%d , a); printf(%d\n, b); } void test2() { int x 1; int y 2; int a x; int b y; Swap(x, y); Swap(a, b); }//做返回值 int all 0; int* fun1() { int* a (int*)calloc(sizeof(int), 3); int* b a; //这里返回b和a都可以 return a; } void test3() { //用int*类型接收可以正常打印 //但是int*接收出问题 int* d fun1(); printf(%d , d[0]); printf(%d , d[1]); printf(%d\n, d[2]); int* v fun1(); printf(%d , v[0]); printf(%d , v[1]); printf(%d\n, v[2]); }struct//struct的typedef typedef struct manbaout { int a; //...... }man, *bingbingbing; //C对结构体升级成了类 故bingbingbing不能与manbaout同名 //这里的bingbingbing代表 stuct manbaout* 类型的变量名做返回值进行修改//修改返回值 typedef struct SeqList { int a; //... }Seq,*SeqL; int func2(SeqL ps) { return ps-a; } void test4() { Seq ps { 0 }; SeqL pa ps; func2(pa); printf(%d, pa-a); }常引用int func3() { static int n 5; return n; } void test5() { //权限不可放大 但是可以缩小 const int s1 10; const int s2 s1; //常量也可以取别名 const int s3 10; printf(%d,s3); //强转 函数返回 创建的临时变量表现为常性 const int a1 func3(); const int a2 (int)3.14; }auto关键字、范围forvoid test6() { auto a 1 1.2; printf(%lf\n, a); //范围for int arr[] { 0, 1, 2, 3, 4, 5 }; for (auto manbaout : arr) { cout manbaout ; } //对数组的改变 for (auto manbaout : arr) { manbaout; } for (auto manbaout : arr) { cout manbaout ; } }关键字inline内联//为了防内存膨胀,决定是否内联的是编译器 //内联是直接替换 不会参与符号汇总 inline const char* whatcanisay() { const char* arr manbaout; return arr; }