网站营销 优势,个人创业做网站,东三省网站建设公司,苏州seo推广优化文章目录 #x1f680;前言#x1f680;C有何过C之处#xff1f;#x1f680;C中的关键字#x1f680;命名空间✈️为什么要引入命名空间#xff1f;✈️命名空间的定义✈️如何使用命名空间中的内容呢#xff1f; #x1f680;C中的输入和输出✈️C标准库的命名空间✈… 文章目录 前言C有何过C之处C中的关键字命名空间✈️为什么要引入命名空间✈️命名空间的定义✈️如何使用命名空间中的内容呢 C中的输入和输出✈️C标准库的命名空间✈️输入输出头文件 C缺省参数✈️缺省参数定义✈️缺省参数的分类✈️缺省参数只能出现在函数声明中 前言
铁子们好啊这是阿辉新开的专栏《拿下C》的第一篇文章本文主要带大家了解一下C带大家从C语言过渡到C所以大家首先要有C语言的基础否则后面的内容你可能会异常懵逼。不会C语言的铁子这里推荐各位先看阿辉的专栏《爱上C语言》点击即可跳转自荐一下嘛 不多bb好吧让我们迈向C的世界 本篇文章仅为C向C语言过渡的第一篇后续会持续更新相关内容阿辉不会去讲C的发展史阿辉旨在让铁子们快速入门C对于c发展史感兴趣的铁子可以自行研究 C有何过C之处
首先我们都知道C这门编程语言是在C语言的基础上发展而来的他名字也是由此而来C是完全兼容C语言的怎么理解呢C语言相当于是C的真子集C包含了C语言的所有特性和语法规则并且可以直接调用C语言的函数和库也就是说C语言的代码在C的环境下同样可以编译运行用ven图表示如下 铁子们或许都听过C是面向对象的语言这个怎么理解呢好的这个咱们先不理解 因为我也不知道my teacher告诉我学完C你就懂了好的铁子们咱们也学完C在懂提前懂了显得咱欺负人
C中的关键字
C中的69个关键字包含C语言中的32个关键字 关键字关键字关键字关键字关键字关键字关键字关键字asmelsenewthisautoenumoperatorthrowboolexplicitprivatetruebreakexportprotectedtrycaseexternpublictypedefcatchfalseregistertypeidcharfloatreinterpret_casttypenameclassforreturnunionconstfriendshortunsignedconst_castgotosignedusingcontinueifsizeofvirtualdefaultinlinestaticvoiddeleteintstatic_castvolatiledolongstructwchar_tdoublemutableswitchwhiledynamic_castnamespacetemplatenullptrtypeidoverridealignasfinalchar16_t
这些关键字不认识没关系也不需要去背用熟了自然就会了
命名空间
✈️为什么要引入命名空间
C引入了命名空间的概念以便更好地组织和管理代码。为啥呢 大型程序一般会使用多个独立开发的库这些库又可能定义大量的全局变量的名字如类、函数和模板等。当程序用到多个供应商提供的库时不可避免地会发生某些名字相互冲突地情况。 这个时候我们将每一个库都装起来用的时候再拿出来用既能保证命名不会冲突又能在需要时使用 命名空间分割了全局命名空间其中每一个命名空间是一个作用域。域是一种空间概念常见的域有局部域、全局域、类域、命名空间域域会影响访问和生命周期
✈️命名空间的定义
首先定义命名空间需要使用namespace这个关键字然后在namepace后面跟上命名空间的名字和一对花括号{}花括号里面放的是命名空间内的变量、函数、类等的定义和声明命名空间也可以嵌套定义 切记命名空间花括号后无分号 下面我们来展示一个例子
//下面这个tmh命名空间嵌套了一个命名空间tzh
namespace tmh//命名空间的名字
{//定义变量int a 10;//定义函数int Add(int left, int right){return left right;}//定义类型struct Node{struct Node* next;int val;};//嵌套命名空间namespace tzh{int c;int d;int Sub(int left, int right){return left - right;}}
}注意 命名空间的名字可以重复这种重复并非两个不同的命名空间而是在编译过程中将相同名字的命名空间合并事实上还是一个命名空间 命名空间不能在类和函数中定义
✈️如何使用命名空间中的内容呢
这里我们引入一个操作符::作用域限定符怎么使用呢我们接着看
命名空间的名字::命名空间内的变量、函数、类型等等 例子
int main()
{printf(%d\n, tmh::a);//上面的例子中的命名空间tmhreturn 0;
}使用using将命名空间中某个成员(局部展开) 例子
using tmh::Node;//将定义的结构体Node展开在全局域中
int main()
{Node a;//用Node创建变量return 0;
}使用using namespace 命名空间名称引入全局展开 可以用using namespace tmh将命名空间展开意味着在整个文件中都可以直接访问该命名空间中的函数、变量等把命名空间中的成员提升到包含命名空间本身和using指示最近的作用域 例子
namespace tmh
{int a 10;int b 5;int c 100;
}int a 30;using namespace tmh;int main()
{printf(%d\n, a);//这种写法是错误的因为全局中定义了a命名空间tmh中的a也展开在了全局域printf(%d\n, ::a);//正确访问全局的a::左边空白表示全局域printf(%d\n, tmh::a);//正确访问tmh中的aprintf(%d\n, b);//正确去访问tmh中的bint c 89;c;//当前局部的c设置成90局部变量优先没有特别的指示优先使用局部域中的元素return 0;
}C中的输入和输出
✈️C标准库的命名空间
C与C语言不同在C中标准库的定义和声明是分开的 std是C标准库的命名空间C将标准库的定义实现都放到这个命名空间中 而将声明放在单独存放在各自的头文件中 std命名空间的使用惯例
在日常练习中建议直接用using namespace std即可这样很方便在项目开发中由于代码较多、规模大就很容易出现冲突问题所以建议指定命名空间去访问或者使用using把常用的名字引入
✈️输入输出头文件
C中输入输出
使用cout标准输出(控制台)和cin标准输入(键盘)时必须包含 iostream 头文件以及std标准命名空间使用C输入输出更方便不需增加数据格式控制比如整形–%d字符–%c ostream 输出流类型全局对象istream 输入流类型全局对象 endl全局的换行符号是流插入运算符是流提取运算符使用C的输入输出更加方便不需要像printf和scanf输入输出那样需要手动控制格式。C的输入输出可以自动识别变量类型本质上是运算符重载但cout和cin的效率比较低
给铁子们直接上代码
struct Person
{char name[10];int age;
};
int main()
{std::cout C ;std::cout C std::endl;//cout与cin对比C语言printf\scanf 来说可以自动识别类型(函数重载运算符重载)int a 10;int* p a;printf(%d,%p\n, a, p);std::cout a , p std::endl;char str[100];std::cin str; //cin不用std::cout str std::endl;struct Person P { tmh, 20 }; //格式化输出printf比cout好printf(name:%s age:%d\n, P.name, P.age);std::cout name: P.name age: P.age \n;
}输入
tmhazjy输出
C C
10,0xffff4860
10,0xffff4860
tmhazjy
name:tmh age:20
name:tmh age:20C缺省参数
✈️缺省参数定义
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时如果没有指定实参则采用该形参的缺省值否则使用指定的实参缺省就是默认没给函数传参就用默认的
void TestFunc(int a 0)
{cout a endl;
}
int main()
{TestFunc(); // 没有传参时使用参数的默认值TestFunc(10); // 传参时使用指定的实参
}✈️缺省参数的分类
半缺省参数
void test1(int a, int b 10, int c 20)
{cout a a endl;cout b b endl;cout c c endl;
}半缺省参数必须从右往左依次给缺省值即第一个形参和第二个形参给了缺省值而第三个形参没有给缺省值这种情况是不被允许的。也不能隔着给即第三个形参和第一个形参给了缺省值而第二个形参没有给缺省值这种情况也是不被允许的 全缺省参数
void test2(int a 10, int b 20, int c 30)
{cout a a endl;cout b b endl;cout c c endl;
}顾名思义就是每一个参数都设置缺省值
✈️缺省参数只能出现在函数声明中
为了避免出现不一致的情况要求缺省参数不能在函数声明和定义中同时出现并且只能出现在函数的声明中 why 因为在预处理阶段会把头文件展开一般函数的声明就放在头文件中。如果只在函数的定义中给了缺省值那头文件展开后函数的声明语句中并没有缺省参数此时如果在调用该函数的时候没有传参希望使用它的缺省值那在程序编译的过程中就会出现问题即函数的声明没给出缺省值意味着该函数需要参数 今天的分享到这里就结束啦如果觉得文章还不错的话可以三连支持一下您的支持就是阿辉前进的动力