当前位置: 首页 > news >正文

iis6 建设网站浏览物联网软件开发

iis6 建设网站浏览,物联网软件开发,百度一下你就知道百度官网,如何在工信部网站注册目录 1. 引用 引用概念 使用场景 1. 做参数 2. 引用做返回值 3.传值、传引用效率比较 4. 引用和指针的不同点 2. 内联函数 3.auto关键字 推导应用场景 auto不能推导的场景 4.基于范围的for循环(C11) 5.指针空值nullptr(C11) 1. 引用 引用概念 引用不是新定义一个…目录 1. 引用 引用概念 使用场景 1. 做参数 2. 引用做返回值 3.传值、传引用效率比较 4. 引用和指针的不同点 2. 内联函数 3.auto关键字 推导应用场景  auto不能推导的场景 4.基于范围的for循环(C11) 5.指针空值nullptr(C11) 1. 引用 引用概念 引用不是新定义一个变量而是给已存在变量取了一个别名编译器不会为引用变量开辟内存空间它和它引用的变量共用同一块内存空间。 举个例子 这里的a我们定义为0 但是b前边加了一个取地址符号但他并不是让a赋值给b而是这里给a另外一个名字--b 这里我们对b或者a修改后他们的数值都会变化如果改变他们的其中一个地址那么另一个地址也会变化也就说他们地址相同  所以引用的实质实际上是改变了元素的名称  引用必须被初始化 在C中声明引用时必须同时进行初始化。这表明引用一旦被创建就必须立即指向一个已存在的变量。你不能像指针那样先声明一个引用然后再让它指向一个变量 int x 5; int b x; // 正确b被初始化为x的引用 int c; // 错误引用必须在声明时被初始化  一个变量可以有多个引用  int a 0; int b a; int c a; int d a; 使用场景 1. 做参数 如果我们想用一个函数来实现两个数的交换用我们学过的知识这里我们使用指针 void Swap(int* a, int* b) {int tmp *a;*a *b;*b tmp; } int main() {int x 10;int y 20;cout x endl;cout y endl;Swap(x, y);cout x endl;cout y endl; } 如果我们不传地址那么a就是x的临时拷贝a的改变不会影响x的值 下面是引用的做法 void Swap(int a, int b) {int tmp a;a b;b tmp; } int main() {int x 10;int y 20;Swap(x, y);return 0; }这里a就是x的别名b就是y的别名对ab进行修改同时就对xy进行修改 但是由于引用定义后不能改变指向引用不能替代指针 当然这里swap函数取名字也可以取xy因为他们在不同作用域对结果没有什么影响 void Swap(int x, int y) {int tmp x;x y;y tmp; }2. 引用做返回值 3.传值、传引用效率比较 #includeiostream using namespace std; #include time.h struct A { int a[10000]; }; void TestFunc1(A a) {} void TestFunc2(A a) {} void TestRefAndValue() {A a;// 以值作为函数参数size_t begin1 clock();for (size_t i 0; i 10000; i)TestFunc1(a);size_t end1 clock();// 以引用作为函数参数size_t begin2 clock();for (size_t i 0; i 10000; i)TestFunc2(a);size_t end2 clock();// 分别计算两个函数运行结束后的时间cout TestFunc1(A)-time: end1 - begin1 endl;cout TestFunc2(A)-time: end2 - begin2 endl; } int main() {TestRefAndValue();return 0; } 我们这里用利用函数去测试一下他们的效率一个传别名一个传函数 传别名的话相当于不用开辟空间所以理论上来说他的效率会更高 并且给定了4万字节的数组会很容易看出来区别 测试一下 会发现确实和我们预计的一样 所以传值传参还是有一定的消耗的 注意 这里的0代表的意思是时间小于一毫秒所以直接归为0  4. 引用和指针的不同点 一.空间的开辟 二. 引用在定义时必须初始化指针没有要求 三.引用在初始化时引用一个实体后就不能再引用其他实体而指针可以在任何时候指向任何一个同类型 实体 四. 没有NULL引用但有NULL指针 五. 在sizeof中含义不同引用结果为引用类型的大小但指针始终是地址空间所占字节个数(32位平台下占 4个字节) 六. 引用自加即引用的实体增加1指针自加即指针向后偏移一个类型的大小 七. 有多级指针但是没有多级引用 八. 访问实体方式不同指针需要显式解引用引用编译器自己处理 九. 引用比指针使用起来相对更安全 2. 内联函数 概念 以inline修饰的函数叫做内联函数编译时C编译器会在调用内联函数的地方展开没有函数压栈的开销 内联函数提升程序运行的效率。 所以根据概念我们可以得知内联函数他的意义就是降低函数的开销适用于一些频繁使用并且函数体较小的函数 在c中可以通过在函数声明前添加关键字inline来指示编译器将一个函数视为内联函数 如 inline int Add(int x,int y) {return xy; }inline是一种以空间换时间的做法省去调用函数额开销。所以代码很长或者有循环/递归的函数不适宜使用作为内联函数。 inline对于编译器而言只是一个建议编译器会自动优化如果定义为inline的函数体内有循环/递归等等编译器优化时会忽略掉内联。inline不建议声明和定义分离分离会导致链接错误。因为inline被展开就没有函数地址了链接就会找不到。 3.auto关键字 1 auto简介 在早期C/C中auto的含义是使用auto修饰的变量是具有自动存储器的局部变量但遗憾的是一直没有 人去使用它大家可思考下为什么 C11中标准委员会赋予了auto全新的含义即auto不再是一个存储类型指示符而是作为一个新的类型 指示符来指示编译器auto声明的变量必须由编译器在编译时期推导而得。 推导应用场景  auto与指针和引用结合起来使用 用auto声明指针类型时用auto和auto*没有任何区别但用auto声明引用类型时则必须加  这样都是对的 在同一行定义多个变量  当在同一行声明多个变量时这些变量必须是相同的类型否则编译器将会报错因为编译器实际只对 第一个类型进行推导然后用推导出来的类型定义其他变量。 void TestAuto() {auto a 1, b 2; auto c 3, d 4.0; // 该行代码会编译失败因为c和d的初始化表达式类型不同 } auto不能推导的场景 1. auto不能作为函数的参数 // 此处代码编译失败auto不能作为形参类型因为编译器无法对a的实际类型进行推导 void TestAuto(auto a) {} 2. auto不能直接用来声明数组  void TestAuto() {int a[] {1,2,3};auto b[] {456}; } 3. 为了避免与C98中的auto发生混淆C11只保留了auto作为类型指示符的用法 4. auto在实际中最常见的优势用法就是跟以后会讲到的C11提供的新式for循环还有lambda表达式等 进行配合使用。  4.基于范围的for循环(C11) 在C98中如果要遍历一个数组可以按照以下方式进行 void TestFor() {int array[] { 1, 2, 3, 4, 5 };for (int i 0; i sizeof(array) / sizeof(array[0]); i)array[i] * 2;for (int* p array; p array sizeof(array)/ sizeof(array[0]); p)cout *p endl; } 对于一个有范围的集合而言由程序员来说明循环的范围是多余的有时候还会容易犯错误。因此C11中 引入了基于范围的for循环。for循环后的括号由冒号“ ”分为两部分第一部分是范围内用于迭代的变量 第二部分则表示被迭代的范围。  void TestFor() {int array[] { 1, 2, 3, 4, 5 };for(auto e : array)e * 2;for(auto e : array)cout e ;return 0; }注意与普通循环类似可以用continue来结束本次循环也可以用break来跳出整个循环  5.指针空值nullptr(C11) 在良好的C/C编程习惯中声明一个变量时最好给该变量一个合适的初始值否则可能会出现不可预料的 错误比如未初始化的指针。如果一个指针没有合法的指向我们基本都是按照如下方式对其进行初始化 void TestPtr() {int* p1 NULL;int* p2 0;// …… } NULL实际是一个宏在传统的C头文件(stddef.h)中可以看到如下代码  #ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define NULL ((void *)0) #endif #endif 可以看到NULL可能被定义为字面常量0或者被定义为无类型指针(void*)的常量。不论采取何种定义在 使用空值的指针时都不可避免的会遇到一些麻烦比如 void f(int) {coutf(int)endl; } void f(int*) {coutf(int*)endl; } int main() {f(0);f(NULL);f((int*)NULL);return 0; } 程序本意是想通过f(NULL)调用指针版本的f(int*)函数但是由于NULL被定义成0因此与程序的初衷相悖。 在C98中字面常量0既可以是一个整形数字也可以是无类型的指针(void*)常量但是编译器默认情况下 将其看成是一个整形常量如果要将其按照指针方式来使用必须对其进行强转(void *)0。 注意 1. 在使用nullptr表示指针空值时不需要包含头文件因为nullptr是C11作为新关键字引入的。 2. 在C11中sizeof(nullptr) 与 sizeof((void*)0)所占的字节数相同。 3. 为了提高代码的健壮性在后续表示指针空值时建议最好使用nullptr。  这样入门大概就到这里下一节就是正式迈入C开始学习类和对象了 感谢阅读
http://www.zqtcl.cn/news/528924/

相关文章:

  • 网站平台建设费用的会计核算凡科教育小程序怎么样
  • 网站配置文件在哪里sns网站需求
  • 网站运营优化建议英国网站域名
  • 网站开发洲际企业网站模板论坛
  • 如何建外贸网站软件工程专业是干什么的
  • 衣联网和一起做网站 哪家强网站seo方案建设目标
  • 深圳企业股权优化网站程序代码优化
  • 中国石油大学网页设计与网站建设软件界面设计要求
  • 看网站有没有做404报名网站建设
  • 有哪些是做二手的网站关于网站制作的指标
  • 网站数据库是谁提供空间坐标系做图网站
  • 网站开发的外文文献佛山做网站格
  • 石家庄网站seo服务免费10大看盘软件
  • 自己做网站卖什么给个网站好人有好报2020免费
  • 网站源码安装步骤网站开发用c 语言
  • 网站首页是什么产品网络推广方案
  • 网站首页制作方案南通市规划建设局网站
  • 网站建设费用兴田德润团队西宁网站策划公司
  • 手机价格网站建设用别人备案域名做违法网站
  • 成都武侯区建设厅官方网站石家庄住房和城乡建设部网站
  • 前端做网站的步骤酉阳网站建设
  • 湖北省住房与建设厅网站php做网站访问记录
  • 做网站的公司没有技术吉林北京网站建设
  • 产品设计培训机构哪家好贵州整站优化seo平台
  • 天津网站制作推广wordpress 果酱
  • 写给初学网站开发们的一封信企业网站建设 ppt
  • 做装修网站多少钱做网站百度一下
  • 用asp做网站的可行性分析9免费建网站
  • 网站域名注册商查询徐州集团网站建设报价
  • 句容网站设计公司做网站充值犯法吗