医疗网站建设方案,长春火车站在哪,wordpress淘客插件破解,域名有了怎么建设网站C练级之初级#xff1a;第五篇 第五篇 C练级之初级#xff1a;第五篇1.auto关键字2.for循环改进3.指针空值nullptr4.内联函数4.1内联函数的概念4.2内联函数的注意点 总结 1.auto关键字 #x1f914;什么是auto(automatic的缩写#xff0c;自动的意思)关键字#xff1f; au…C练级之初级第五篇 第五篇 C练级之初级第五篇1.auto关键字2.for循环改进3.指针空值nullptr4.内联函数4.1内联函数的概念4.2内联函数的注意点 总结 1.auto关键字 什么是auto(automatic的缩写自动的意思)关键字 auto是自动推导类型的关键字在编译阶段根据表达式右边的表达式自动推导表达式左边的类型 你们可能不相信为了查看类型介绍一个 操作符typeid().name() auto关键字是解决什么问题呢 当类型过长时我们就可以用auto关键字但是其实typedef也是可以的只是typedef要先知道类型也就是说你要先打一遍这个类型 auto关键字有什么注意点 auto右边一定要初始化 auto定义多个变量时这些变量类型一定要一致 auto不能推导数组 auto不能做函数参数 所以总结一下一般只有当数据类型过长时我们用autofor循环中我们用auto其他情况下我们很少很少用auto 2.for循环改进 很明显for循环的改进是解决C语言中for循环的书写问题的 刚才不是说auto用在for循环中吗那么怎么用呢 那么这段C的for循环代码的意思是什么 代码意思依次将arr中的元素赋值给e(e是element元素的意思你也可以取其它名字)然后一个一个打印 适用数组与容器 可以用breakcontinue等关键字 如何修改数组元素呢 用引用类型就可以修改数组了 但是有一个点要注意 3.指针空值nullptr C语言不是有空指针NULL了吗 按理来说第一个应该是int第二个应该是int*
看看NULL的定义
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif可以看到NULL可能被定义为字面常量0或者被定义为无类型指针(void*)的常量 NULL是一个宏会直接替换而nullptr是一个关键字表示空指针的意思 为了更好的区别空指针和0所以引入了nullptr关键字 注意
在使用nullptr表示指针空值时不需要包含头文件因为nullptr是C11作为新关键字引入的。在C11中sizeof(nullptr) 与 sizeof((void*)0)所占的字节数相同 。为了提高代码的健壮性在后续表示指针空值时建议最好使用nullptr。
4.内联函数 内联函数是解决C语言什么问题 我们从跨过表面看看内部 我们可以观察出像这种频繁调用且汇编代码量并不大的函数每次都要建立函数栈帧开销太大了 如何高效解决像这种频繁调用的且汇编代码量很少的函数呢 在以前学习C语言时我们可以试试用宏去解决 总结一下宏在这里的优缺点
优点不需建立函数栈帧更高效(替换操作)缺点写法太复杂可读性差不能调试 那么有没有更好的解决方案呢 这就需要介绍内联函数了 4.1内联函数的概念
以inline修饰的函数叫做内联函数编译时C编译器会在调用内联函数的地方展开没有函数调用建立栈帧的开销内联函数提升程序运行的效率。 这样看来内联函数既不需要建立函数栈帧不复杂可读性好可以调试高效是对宏的优化也是对频繁调用的且汇编代码不多的函数的一种优化 既然内联函数这么好那我们能不能在每个函数钱都加上inline呢 4.2内联函数的注意点
注意 内联函数是适用于频繁调用的且汇编代码不多的函数inline对于编译器而言只是一个建议最终的结果由编译器定一般频繁调用且汇编代码量很少的函数编译器采用inline对于递归或者代码量很大的情况下编译器不采用递归。 为什么我的代码量便很少编译器却没有采用内联函数呢 因为在默认的debug版本下inline不会起作用否则不方便调试所以需要以下设置 . inline不建议声明和定义分离分离会导致链接错误。 因为inline函数是在编译时直接展开没有地址所以在链接时找不到声明所对应的定义故报链接型错误 总结内联函数 被inline修饰的函数叫做内联函数内联函数是适用于频繁调用的且汇编代码不多的函数解决函数频繁开辟栈帧的开销inline对于编译器而言只是建议内联函数的声明和定义不能分开 总结
今天主要学习了auto关键字nullptr关键字for循环的改进内联函数是什么及其注意点如果喜欢本篇不妨留下一个❤️