一.C和C第一个程序对比在C语言中第一个程序为#includestdio.h int main() { printf(hello wrold\n); return 0; }引用头文件stdio.h并利用printf函数输出。而在C中则需要#includeiostream using namespace std; int main() { cout hello world endl; return 0; }引用头文件展开命名空间std并利用cout函数来输出。接下来将对C的基础语法进行一定的讲解。二.命名空间namespace在C/C中变量、函数和类都是大量存在的。而针对这些大量存在的变量、函数和类重名的情况就会产生歧义甚至是错误。而为了解决不同函数、不同类中所存在的同名变量、函数的情况在C中定义了namespace命名空间来解决这一问题。在C语言中在一个函数中是不允许出现重名变量的。如果将重名变量分别定义在全局域和局部域程序在调用的过程中会优先调用局部域然后再去调用全局域。#includestdio.h int rand 1; int main() { int rand 0; printf(%d\n,rand); printf(%d\n,::rand);//用冒号表示输出某个特定命名空间的变量 return 0; }例如在上述代码中同时在全局域和局部域定义了rand变量。如果只利用printf输出rand变量则会输出局部变量中所定义的rand输出结果为0.如果只想输出全局域的rand变量则需要利用 :: 操作符如果是全局域:: 前不需要加任何东西。namespace本质是定义了一个独立于全局域和局部域之外的域不同的命名空间可以定义相同的变量其使用语法如下#includestdio.h #includestdlib.h namespace example { int rand 0; } //int rand 1; int main() { int rand 2; printf(%d\n,rand);//默认局部变量 2 //printf(%d\n,::rand);//全局域中的rand这里会重载 printf(%p\n,::rand);//rand函数的函数指针 printf(%d\n,example::rand);//example的命名空间中 return 0; }命名空间的定义类似于结构体的定义法不同点是最后没有分号; 在主函数中如果特定输出example域中的rand变量的值则需要利用双冒号example::rand表示定向输出example域中的rand变量的值。同样如上例所示引入了头文件stdlib.h其内部有rand函数所以在全局域中定义的rand函数会形成重载程序编译报错。C中存在有局部域、全局域、命名空间域和类域。而有了不同域的隔离变量名字相同的情况就得到解决只需要根据实际需求去相应的域中找相应的变量即可。同时命名空间域中变量的生命周期和全局变量相同持续到整个程序运行结束。命名空间可以进行嵌套其嵌套和调用的示例如下#includeiostream namespace example { namespace example1 { int a 1; struct Node { int a 1; char ch c; }; int Add(int x, int y) { return x y; } } namespace example2 { int a 2; struct Node { int a 1; char ch c; }; int Add(int x, int y) { return x y; } } } int main() { std::cout example::example1::a std:: endl; return 0; }如这段代码实例在example的命名空间中定义了example1和example2的两个命名空间如果想要输出example1中a的值则需要example::example1::a。通过上例也可以看出命名空间可以定义变量、函数、结构体类。C的标准库函数定义在std中所以在用一些标准输入输出函数之前要了解其具体在什么命名空间中。例如cout和cin等函数都在std的命名空间中所以使用时需要std::cout std::endl; std::cin a ;如果在一整个程序中确认不会出现相同名称的情况下可以利用如下代码进行命名空间的展开来方便输入输出。using namespace std;这里的展开和头文件在编译过程中的展开完全不相同头文件在编译过程中的展开是将头文件中的内容拷贝到此位置而命名空间的展开则是指将变量\函数可查找的范围在局部域全局域之外新增加了一个std域并没有将其内容拷贝。但这种方法虽然在学习C基础输入输出时一般不会出现问题但如果在之后一个大的项目中这样全部展开容易出现不少错误所以针对此情况可以针对常用的函数进行展开如下面代码所示using std::cout; using std::cin; using std::endl;这样就可以在程序中直接调用cout、cin和endl。如果出现了多个相同名称的namespace程序会认为其是同一个命名空间而将其合并到一起。二.C的输入和输出在C中输入和输出定义到 iostream 的头文件中其是Input Out Stream的缩写是标准的输入输出流库输入输出对象。std :: cin是 istream 类的对象主要面向窄字符的标准输入流。std::cout是ostream类的对象主要面向找字符的标准输出流。std::endl是一个函数实现了换行以及刷新缓冲区的功能。 是流插入运算符 是流提取运算符。值得一提的是C中的cout和cin可以自动识别类型方便用户进行输入和输出操作。