网站建设存在的困难问题,wordpress 淘客api,电商网站建设维护,wordpress 评论5000.前言 C是一门非常好的编程语言#xff0c;但可能在学习C的过程中会遇到很多困难。人们常说 “一个人走得很快#xff0c;一群人会走的更远”#xff0c; 所以就让我们一起攻坚克难#xff0c;一起征服C吧#xff01;从本章开始#xff0c;我们将开始C的基础学习#x…0.前言 C是一门非常好的编程语言但可能在学习C的过程中会遇到很多困难。人们常说 “一个人走得很快一群人会走的更远” 所以就让我们一起攻坚克难一起征服C吧从本章开始我们将开始C的基础学习一起加油吧 1.什么是C C语言是结构化和模块化的语言适合处理较小规模的程序。对于复杂的问题规模较大的程序需要高度的抽象和建模时C语言则不合适。为了解决软件危机 20世纪80年代 计算机界提出了OOP(objectoriented programming面向对象)思想支持面向对象的程序设计语言应运而生。 1982年Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念发明了一种新的程序语言。为了表达该语言与C语言的渊源关系命名为C。因此C是基于C语言而产生的它既可以进行C语言的过程化程序设计又可以进行以抽象数据类型为特点的基于对象的程序设计还可以进行面向对象的程序设计。 2.C关键字
C总计63个关键字C语言32个关键字
asmdoifreturntrycontinueautodoubleinlineshorttypedefforbooldynamic_castintsignedtypeidpublicbreakelselongsizeoftypenamethrowcaseenummutablestaticunionwchar_tcatchexplicitnamespacestatic_castunsigneddefaultcharexportnewstructusingfriendclassexternoperatorswitchvirtualregisterconstfalseprivatetemplatevoidtrueconst_castfloatprotectedthisvolatilewhiledeletegotoreinterpret_cast
3.命名空间 ①像下面这样我们在命名全局变量的时候并不知道C语言库里面的函数这时候就会发生命名冲突②还有当我们在公司分模块写代码的时候我们并不知道别人是怎样命名函数、全局变量的也可能引发命名冲突。 一个栗子
#includestdio.h
#includestdlib.h
int rand 10;
int main()
{printf(%d\n, rand);return 0;
}代码运行的结果 C语言不能很好的解决命名冲突的问题而在C中使用了命名空间对标识符的名称进行本地化以避免命名冲突或名字污染而定义命名空间需要使用到namespace关键字后面跟命名空间的名字(注意不需要在{}后面加逗号然后接一对{}{}中为命名空间的成员把变量封装在命名空间域中防止引起命名冲突。 3.1命名空间的定义
命名空间形式如下
namespace phh
{int rand 1;
}现在我们已经命名好了那么该怎么访问命名空间里面的变量呢这时候我们要使用::域作用限定符左边空白表示全局域去访问全局变量左边是命名空间的名字则回去命名空间域访问命名空间的成员变量。 eg:
#includestdio.hint a 1;
//namespace是C的关键字后面跟的是命名空间的名字
//然后加一对{}括号即可注意不需要在{}加逗号
//把全局变量封装在命名空间域中防止引起命名冲突
namespace phh
{int a 2;
}
//::域作用限定符
//左边空白会去全局域访问
int main()
{int a 0;printf(%d\n, a);printf(%d\n, ::a);printf(%d\n, phh::a);return 0;
}代码运行的结果如下 这时候我们就可以用C解决与库里面命名冲突问题了
#includestdio.h
#includestdlib.h
namespace phh
{int rand 1;
}
int main()
{printf(%d\n, phh::rand);printf(%p\n, rand);//库里面的rand是函数函数名为地址return 0;
}代码运行的结果如下
3.2命名空间的特性 1.正常的命名空间定义–可以定义变量/函数/类型 namespace phh
{int rand 10;int Add(int left, int right){return left right;}struct Node{struct Node* next;int val;};
}2.命名空间可以嵌套使用 #includestdio.h
namespace N1
{int a 0;int b 0;int Add(int left, int right){return left right;}namespace N2{int a 1;int c 0;int d 0;int Sub(int left, int right){return left - right;}}
}
int main()
{printf(%d\n, N1::a);//嵌套的命名空间还可以使用同一个变量名printf(%d\n, N1::N2::a);//也可以把函数封装在命名空间域中然后通过指定空间域进行访问printf(%d\n, N1::Add(1, 2));return 0;
}代码运行的结果如下 3.同一个工程中可以存在多个相同的名称编译器最后会合并成同一个命名空间 //Queue.h
namespace N1
{int x 1;
}//Stack.h
namespace N1
{int y 2;
}#includestdlib.h
#includeQueue.h
#includeStack.h
int main()
{//printf(%d\n, N1::x);printf(%d\n, N1::y);return 0;
}代码运行的结果如下 注意 如果Queue.h和Stack.h的N1中使用了同一个变量名会发生命名冲突这时候可以使用命名空间嵌套或定义不同命名空间的名字。 3.3命名空间的使用
命名空间使用三种方式 ①加命名空间的名称及作用限定符 #includestdio.h
int a 1;
namespace phh
{int a 2;
}int main()
{int a 0;printf(%d\n, a);printf(%d\n, ::a);printf(%d\n, phh::a);return 0;
}这种方法需要对命名空间域进行多次访问会显得代码冗余建议在访问次数少的时候使用。 ②使用using namespace 命名空间名称引入 #includeiostream
namespace phh
{int a 1;int b 1;
}
using namespace phh;
//相当于把命名空间中的成员变量放到了全局域
int main()
{int a 0;printf(%d\n, a);printf(%d\n, ::a);return 0;
}代码运行的结果如下 这种方法把命名空间域中的变量放到全局域中可能会引起命名冲突一般建议在日常练习中使用。 ③使用using将命名空间中的某个成员引入 #includestdio.h
int b 0;
namespace phh
{int a 1;int b 1;
}
using phh::a;
int main()
{printf(%d\n, a);return 0;
}代码运行结果如下 不建议把命名空间的里变量全部展开存在风险可以指定成员访问或把常用的展开推荐使用这种方法。 4.C输入输出
C学习须知 1.std是C标准库的命名空间命名C标准库的定义实现都放在这个命名空间中 2.cout是标准输出对象控制台cin是标准输入对象键盘endl是特殊的C符号相当于换行符\n 3.cout\cin\endl被定义在stdC标准库的命名空间中需要包含头文件#includeiostream需要按命名空间的使用方法才能使用 4.cout\cin可以自动识别变量类型可以一次读取多个变量也就是不用像C语言中printf\scanf那样指定变量的格式读取、输出多个变量 5.在以.cpp为后缀的文件中C语言、C混用的时候使用printf/scanf比cout\cin效率高一点因为C要兼容C语言所以C、C语言有各自不同的缓冲区所以在输入输出前需要检查C语言缓冲区是否有东西会影响效率。 一个栗子
//C的输入和输出
#includeiostream
using std::cout;
using std::cin;
using std::endl;
int main()
{int x 0;double b 0;cin xb;cout x b endl;return 0;
}代码运行的结果如下 std命名空间的使用惯例 1.在日常练习中建议直接using namespace即可这样很方便。 2using namespace std展开标准库就全部暴露出来如果我们定义的变量跟库里面的类型/对象/函数就存在冲突问题所以在项目开发中建议展开某个库里面的成员变量如需要使用cout就建议using std::cout。 总结 本章我们一起学习了C的一些细则如命名空间、输入输出了解了C与C语言的不同之处内容不多但很重要哦希望对你们了解C有些许帮助感谢大家阅读如有不对欢迎纠正