网站怎么建立视频,版面设计素材,深圳建设工程中标公示,微信开放文档目录
前言
一、什么是C
二、C关键字
三、与C语言不同的地方
3.1头文件
四、命名空间
4.1命名空间的概念写法
4.2命名空间的访问
4.3命名空间的嵌套
4.4命名空间在实际中的几种写法
五、输入输出
5.1cout
5.2endl
5.3cin
总结 前言
开启新的篇章#xff0c;这里…目录
前言
一、什么是C
二、C关键字
三、与C语言不同的地方
3.1头文件
四、命名空间
4.1命名空间的概念写法
4.2命名空间的访问
4.3命名空间的嵌套
4.4命名空间在实际中的几种写法
五、输入输出
5.1cout
5.2endl
5.3cin
总结 前言
开启新的篇章这里进行对C的学习本篇文章知识简单介绍一下C一点知识以及和C的区别。 一、什么是C
我们之前学过C语言知道C语言是结构化和模块化的语言适合处理较小规模的程序。对于复杂一些的问题需要高度的抽象和建模的时候C语言不合适。所以C就出现了。
Cc plus plus是一种计算机高级程序设计语言由C语言扩展升级而产生最早于1979年由本贾尼·斯特劳斯特卢普在ATT贝尔工作室研发。
C既可以进行C语言的过程化程序设计又可以进行以抽象数据类型为特点的基于对象的程序设计还可以进行以继承和多态为特点的面向对象的程序设计。C擅长面向对象程序设计的同时还可以进行基于过程的程序设计。 C几乎可以创建任何类型的程序游戏、设备驱动程序、HPC、云、桌面、嵌入式和移动应用等。 甚至用于其他编程语言的库和编译器也使用C编写。
C拥有计算机运行的实用性特征同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。
C可见也非常的重要。经过了多年的修改和规定语言一直在发展。
这里可以点击进去看最新的编程语言排名编程语言排名 - HelloGitHub 这里是2025年1月最新的榜单可见用的还是很多的。
二、C关键字 C共计63个关键字C语言共有32个关键字。 asmdoifreturntrycontinueautodoubleinlineshorttypedefforbooldynamic_castintsignedtypeidpublicbreakelselongsizeoftypenamethrowcaseenummutablestaticunionwchar_tcatchexplicitnamespacestatic_castunsigneddefaultcharexportnewstructusingfriendclassexternoperatorswitchvirtualregisterconstfalseprivatetemplatevoidtrueconst_castfloatprotectedthisvolatilewhiledeletegotoreinterpret_cast
这些关键字我们可以看看熟悉熟悉可以看到大多数我们在学C的时候看见过。所以C与C语言完全兼容C语言的绝大部分内容可以直接用于C的程序设计用C语言编写的程序可以不加修改地用于C。
三、与C语言不同的地方
3.1头文件
我们知道C语言的头文件大多数都是stdio.h或者其它的而C则是用iostream注意这里是没有.h后缀的因为早在以前的时候有一些编译器是可以用.h的例如VC6.0因为它没有命名空间但后来命名空间的出现这里就规定把.h去掉了因为这样可以更好的与C语言区分开。
四、命名空间
4.1命名空间的概念写法
在C语言中我们可以知道命名冲突是一个很大的问题在C/C中变量、函数和类是大量存在的这些变量、函数和类的名称都将存在于全局变量中可能会导致非常多的冲突。
这里就可以使用命名空间对标识符的名称进行本地化以避免命名冲突或名字污染namespce关键字就是解决这类问题的。
我们知道一段代码里有不同的域例如类域变量域常量域类域还有命名空间域。
namespace n1
{int rand 1;
}
这里就命名了一个n1的域可以想象这是一个小块这里面有一个整形变量rand赋值为1。我们知道rand是一个函数但为什么没有报错命名冲突呢因为这里它是在n1的域里的并不是全局域里的所以不会发生冲突。注意这里大括号外面没有分号了。
4.2命名空间的访问
首先我们先看一下这个代码
int a 0;//全局域int main()
{int a 10;//局部域printf(%d\n, a);return 0;
}我们之前学过这里如果调用a这个变量它是会是局部域也就是最后打印的结果是10。但是如果我们想要也打印出来全局域的a变量该怎么写。
这里就会用到一个符号::双冒号 双冒号::是一个作用域解析运算符scope resolution operator用于指定命名空间、类、结构体、枚举等的作用域。 如果也要打印全局变量的a我们就可以写成
int a 0;//全局域int main()
{int a 10;//局部域printf(%d\n, a);printf(%d\n, ::a);//左边是空白代表去全局域访问return 0;
}
::左边要是空白的话那就代表着全局域。
这里运行一下我们可以看见 运行成功和我们的想法一致如果我们加上了之前的命名空间并把之前的rand变为a我们该如何访问这个命名空间里的a呢我们依旧可以用爽冒号来实现这一效果 namespace n1
{int a9;
}int a 0;//全局域int main()
{int a 10;//局部域printf(%d\n, a);printf(%d\n, n1::a);return 0;
}可以看见访问成功了这个的意义其实就是可以通过命名空间来防止大项目里的命名冲突。这里如果我们把命名空间打开了会怎么样。命名空间打开时用
using namespace 之前命名空间的名字;
所以我们把刚刚的代码修改一下命名空间打开
namespace n1
{int a 9;
}
using namespace n1;int a 0;//全局域int main()
{int a 10;//局部域printf(%d\n, a);printf(%d\n, n1::a);return 0;
}
这里就把命名空间打开了。这时候运行 也是可以的这里看不出什么依旧是局部变量先访问命名空间也可以访问。我们把主函数里修改就输出一个a看看会发生什么
namespace n1
{int a 9;
}
using namespace n1;int a 0;//全局域int main()
{int a 10;//局部域printf(%d\n, a);return 0;
} 我们发现这里a输出的是10所以如果把命名空间打开那么命名空间里的就相当于全局域。
我们不妨可以试一试输出全局域的程序会怎么样
namespace n1
{int a 9;
}
using namespace n1;int a 0;//全局域int main()
{printf(%d\n, a);return 0;
}运行一下就会发生报错 a不明确也就发生了冲突。所以在使用命名空间打开的时候要注意。 正常是局部域-全局域-不会主动去命名空间搜索需要指定或者展开 4.3命名空间的嵌套
当然命名空间也可以进行嵌套。但这里我们主要了解的是嵌套的意义和使用访问方法。
namespace N1
{int i 0;namespace N2{int i 2;}
}
这就是一个嵌套的命名空间我们如果想要访问这两个i给它打印到屏幕上该怎么写呢
这里还是会用到双冒号
int main()
{//嵌套访问printf(%d\n, N1::i);printf(%d\n, N1::N2::i);return 0;
}
这样就访问到了代表N1中的i和N1中N2里的i。这样做有什么作用呢 组织代码嵌套命名空间可以将相关的代码组织在一起使得代码更加清晰和结构化。例如可以将与图形相关的类和函数放在一个命名空间内将与网络相关的类和函数放在另一个命名空间内。 避免命名冲突通过在不同的命名空间中使用相同的名称可以避免命名冲突。例如如果有两个模块都定义了一个名为Utils的命名空间那么它们可以通过嵌套命名空间来解决冲突如Module1::Utils和Module2::Utils。 提供更好的可扩展性通过嵌套命名空间可以将代码组织成多层次的结构从而提供更好的可扩展性。例如可以在一个命名空间内创建多个子命名空间每个子命名空间代表不同的功能模块或组件。 提供更好的封装性嵌套命名空间可以将代码隐藏在一个命名空间内从而提供更好的封装性。只有在需要的时候才会引用外部命名空间的内容减少了全局命名空间的污染。 总的来说嵌套命名空间可以提供更好的代码组织、封装和可维护性避免命名冲突并提供更好的可扩展性。它是一种良好的编程实践特别适用于大型项目和团队协作。 4.4命名空间在实际中的几种写法
1.假如我们要使用std命名空间如果我们要在项目中使用命名空间就尽量最好不要打开因为一旦打开后你不知道会发生什么会和哪一个冲突这样很不方便而且很头疼最好是不用打开。就类似下面的
using namespace std;
展开了std命名空间编译器就可以进行搜索推荐这么写后续就可以不加了但直接展开会有风险如果定义和库重名就报错了建议项目里不要这么写。
平时我们练习代码可以这么写因为比较方便。
2.我们可以用到库的时候再用双冒号来写
std::cout
但是假如我们要写成千上万个呢那就非常麻烦了。
3.所以我们可以把常用的在前面展开不把整个命名空间展开
using std::cout;
using std::endl;
这样后续我们就可以用cout和endl了就不需要进行用双冒号了冲突问题就大大的减小了。
五、输入输出
5.1cout
插入流运算符cout就相当于c语言中的打印这里也就是输出我们可以直接用代码进行演示非常的简单
#includeiostream
using std::cout;//流插入运算符,连续一样插入多个东西不用指定类型自动识别类型
using std::endl;//等价于换行符
int main()
{cout hello world endl;return 0;
}
这里cout后面直接加上自己想要输出的东西它有一个优点就是它可以自动识别类型完了输出类型但是当它输出小数的时候只会输出一位小数如果我们想要设置小数的宽度建议直接使用C语言的设定宽度因为c里的有点难用。因为c包含了c所以c里的东西c也可以使用我们可以穿插着来写。
如果输出多个可以这么写
int main()
{int a 3;cout hello world a endl;return 0;
}5.2endl
这里理解为c里的换行和C语言里的\n是一样的效果。
5.3cin
流提取运算符这里就是和C语言中的scanf一样但是使用比C要简单
#includeiostream
using std::cin;//流提取运算符
using std::cout;//流插入运算符,连续一样插入多个东西不用指定类型自动识别类型
using std::endl;//等价于换行符
int main()
{int x 0;cin x;cout hello world endl;cout hello world x endl;return 0;
}
这里就用了这三个会用就可以不用深入了解。等到精通的时候可以考虑深入了解实现。 总结
今天主要就是C的认识初始。