C/C++入门易错点及常用小技巧

8079d7e0e3307b376af5421f94ea7b91.png

点击上方蓝字关注我,了解更多咨询

e958301b4992987e2df0e6462eb4cc0c.png

C++语言诞生至今已有30多个年头了,主要集中在需要运行效率比较高的行业,比如现在的游戏开发以及高效服务器等等。

C++学习难度比其它语言都要高,这是不可否认的,其学习难度主要在于它的复杂性,如何入门C++,想必很多人都头疼过。讲到入门,我们首先是掌握基础语法,C++的语法是和C语言的语法很相近。

ca63dc8c01866f6bd6b3c3799ffff6fe.png

**1. int型 :**绝对值在10^9范围内的整数都可以定义成int型。

**2. long long型 :**如果long long型赋值大于2^31 -1的初值,则需要在初值后面加上LL,否则会编译错误。

**3. float、double输入输出格式 :**使用printf("%f",c);语句时,%f是float和double型的输出格式。而在使用scanf输入时,float输入格式为%f,double输入格式为%lf。

**4. if条件 :**由于if(n)表示if(n!=0),所以if(!n)表示if(n==0)

**5. for语句 :**注意在C语言中不允许在for(A;B;C)语句的表达式A里定义变量(比如inta=0;的写法是不允许的),但在C++中可以

**6. 数组定义 :**如果数组大小较大(10^6级别以上),则需要将其定义在主函数外面,否则会使程序异常退出。

**7. 数组赋初值 :**如果我们定义一个数组int array[10]={12,1,6,4}.可知只对数组的前四项赋值,那么后面没有赋值的元素默认为0.但如果该数组没有赋初值,数组中的每个元素都可能会是一个随机数(不一定是0)。所以如果想给整个数组都赋值为0,简单介绍以下四种方法:

  • int array[10]={};

  • int array[10]={0};

  • memset函数 :memset(array,0,sizeof(array));//若数组为int array[10],则此处sizeof(array)=4*5=20,因为

memset是按字节赋值. 格式 memset(数组名,值,sizeof(数组名));

  • fill函数 :fill(array,array+5,8);//数组从array[0]到array[4]均被赋值为8,格式 fill(起始地址,结束地址,值);

**注意:**memset()函数需头文件或<string.h>. 且memset()只能为数组赋初值0和-1,因为memset()只能以字节为单位赋值fill()函数需头文件. 且fill()可以为数组或容器的某段区域赋某个任意相同的值.

8. 二维数组赋值 :若二维数组array[4][5]={{1,2,3,4,5},{2,2,3},{},{4,2,3,5}};可以看出第三行用{}跳过了(如果不加大括号是无法通过编译的)

**9. 字符数组初始化 :**字符数组可以通过直接赋值字符串来初始化(仅限初始化,程序其他位置不允许这样直接赋值整个字符串)

**10. 字符数组输入输出 :**定义char str[10]; scanf("%s",str); pritnf("%s",str); 注意字符数组在输入时不需要加&取地址运算符. 且scanf输入时%s通过空格或换行来识别一个字符串的结束 gets用来输入一行字符串.gets识别换行符\n作为输入结束,因此scanf完一个整数后如果要使用gets,需要先用getchar接收整数后的换行符;puts输出一行字符串后会紧跟一个换行(\n)

**11. 字符数组长度的重要性 :**字符数组的长度一定要比实际存储字符串的长度至少多1,作为结束符'\0'.注int型数组不需要. 且如果不是使用scanf函数的%s格式或gets函数输入字符串(例如getchar),一定要手动早输入的每个字符串后加‘\0',否则printf和puts输出字符串将无法识别字符串末尾而输出一大堆乱码.

**12. sscanf与sprintf :**sscanf : int n; char str[10]="123"; sscanf(str,"%d",&n); //sscanf写法的作用是把字符数组str中的内容以"%d"的格式写到n中(从左往右). sscanf还支持正则表达式. sprintf : int n; char str[10]="123"; sprintf(str,"%d",n); //sprintf写法的作用是把n以"%d"的格式写到str字符数组中(从右往左)

**13. 引用& :**注意要把引用的&与取地址运算符&区分开. 引用并不是取地址的意思,引用不产生副本,而是给原变量起了个别名 .由于引用是产生变量的别名,因此常量不可以使用引用。所以:

b52c69cdcc4ba86e4e0ac06419bc4a94.png

其中不可以直接写成swap(&a,&b),而必须用指针变量p1和p2存放&a和&b,然后把指针变量作为参数传入.

14. 访问结构体内的元素 :

19c0c9c6950bcc59db2f0f2149f4ced0.png

于是访问stu中变量的写法: stu.id stu,name stu.next

访问指针变量p中的元素的写法: (*p).id <=> p->id (*p).name <=> p->name (*p).next <=> p->next

15. 结构体的初始化

0991c380ccbb2953c00e9bad93bb6798.png

**注意:**如果自己重新定义了构造函数,则默认生成的构造函数就会被覆盖. 如果想不经初始化就定义结构体变量需手动加上.

21bab3eb99f0190b154bc8ae21055223.png

END

*声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

34ccaeb5db565224a2b3599fe79dc218.png

bc0a568f03f639cd26a250c98443dad5.gif

戳“阅读原文”我们一起进步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337905.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

quasar_Quasar和Akka –比较

quasaractor模型是用于容错和高度可扩展系统的设计模式。 角色是独立的工作程序模块&#xff0c;它们仅通过消息传递与其他角色进行通信&#xff0c;可以与其他角色隔离而失败&#xff0c;但是可以监视其他角色的故障并在发生这种情况时采取一些恢复措施。 角色是简单&#xff…

什么是自定义函数?精简回答

点击上方蓝字关注我&#xff0c;了解更多咨询1、自定义函数是程序员根据所要完成的功能&#xff0c;自己写出的源代码实现该功能。2、自定义函数和库函数一样&#xff0c;具有函数名&#xff0c;返回值类型&#xff0c;和函数参数。示例1&#xff1a;写一个函数找出两整数的值。…

C++ 创建文件夹的几种方式汇总确定不来看看???

点击上方蓝字关注我&#xff0c;了解更多咨询1、使用 system() 调用 dos 命令。2、使用头文件 direct.h 中的 access 和 mkdir 函数。关于 direct.h 我觉得 维基百科 上介绍的不错3、调用 Windows API 函数。4、调用 MFC 封装好的接口函数。不推荐此方法&#xff0c;出错的话会…

java socket 传送进度_java-★-Socket文件上传/进度条

客户端代码&#xff1a;1、客户端运行程序&#xff1a;package wtb.khd;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.OutputStream;import …

c语言中typedef和define的区别

点击上方蓝字关注我&#xff0c;了解更多咨询1、typedef仅限于为类型定义符号名称。define不仅可以为类型定义别名&#xff0c;还可以为数值定义别名。例如&#xff0c;可以将1定义为ONE。2、typedef由编译器解释&#xff0c;define语句由预编译器处理。实例#include <stdio…

c语言中预处理器是什么?

点击上方蓝字关注我&#xff0c;了解更多咨询1、C语言有预处理器&#xff0c;Java中没有这个概念&#xff0c;其实只是文本替换工具。2、C的预处理器&#xff0c;即CPP&#xff0c;将在实际编译器中完成处理&#xff0c;所有预处理命令将从#开始。实例#include <stdio.h>…

垃圾回收算法以及垃圾回收器_什么是垃圾回收?

垃圾回收算法以及垃圾回收器以下是我们的垃圾收集手册中的一个示例&#xff0c;该手册将在接下来的几周内发布。 同时&#xff0c;花点时间熟悉垃圾收集的基础知识-这将是本书的第一章。 乍一看&#xff0c;垃圾收集应该处理顾名思义的问题–查找并丢弃垃圾。 实际上&#xff…

c语言中fgetc函数的介绍

点击上方蓝字关注我&#xff0c;了解更多咨询1、fgetc函数返回的字符实际上是文件流中位置指针指向的字符。当fgetc函数读取错误时&#xff0c;返回EOF并设置文件错误标志位。2、该函数以无符号char强制转换为int的形式返回读取的字符&#xff0c;如果到达文件末尾或出现读错&a…

花5分钟了解C语言基本语法元素快来

点击上方蓝字关注我&#xff0c;了解更多咨询C语言是一种编程语言&#xff0c;和其它语言一样&#xff0c;也定义了自己的语法和词汇。学习C语言&#xff0c;首先要学习C语言的词汇&#xff0c;再学习C语言的语法规则&#xff0c;然后由词汇构成语句&#xff0c;由语句构成源程…

c语言中ftell函数是什么

点击上方蓝字关注我&#xff0c;了解更多咨询1、C语言函数ftell用于获取文件位置指针当前位置相对于文件首的偏移字节数。2、通过ftell函数获取当前文件的大小&#xff0c;然后通过fread函数读取缓冲区。返回值&#xff0c;如果成功&#xff0c;该函数返回位置标识符的当前值&a…

jdk入门_JDK 9 REPL:入门

jdk入门会议是聚会Java名人的好地方。 Devoxx France是与Java语言架构师&#xff0c;前同事和老朋友Brian Goetz&#xff08; briangoetz &#xff09;见面的一个机会。 我们谈论了JDK 9&#xff0c;而他全都热衷于REPL。 他提到&#xff0c;尽管Java SE 9中有很多重要功能 &am…

c语言中局部变量是什么

点击上方蓝字关注我&#xff0c;了解更多咨询1、函数内部定义的变量称为局部变量&#xff0c;其作用域仅限于函数内部&#xff0c;离开函数后无效&#xff0c;使用后报错。2、局部变量只能在函数内部使用&#xff0c;离开函数后无效&#xff0c;再次使用会报错。实例#include &…

java接口自动化Excel占位符_基于maven+java+TestNG+httpclient+poi+jsonpath+ExtentReport的接口自动化测试框架...

接口自动化框架项目说明本框架是一套基于mavenjavaTestNGhttpclientpoijsonpathExtentReport而设计的数据驱动接口自动化测试框架&#xff0c;TestNG 作为执行器&#xff0c;poi用于读取存放于excel的接口用例&#xff0c;jsonPath用于校验返回值&#xff0c;以及提取返回值。本…

C语言为什么要定义short,int,long这么多整数类型?

点击上方蓝字关注我&#xff0c;了解更多咨询整数类型有int、short int、long int三种类型&#xff0c;用于需要不同存储空间的整数使用。整数类型有正整数和负整数之分&#xff0c;在C语言中&#xff0c;规定整型的最高位为符号位&#xff0c;最高位为“0”表示正数&#xff0…

c语言中函数参数类型的探究

点击上方蓝字关注我&#xff0c;了解更多咨询函数中的参数个数可以是0&#xff0c;也可以是一个或多个参数。下面我们带着这三种不同的情况&#xff0c;分别在c语言中进行讨论。1、函数没有参数&#xff0c;表示没有参数列表。int func1(); //声明一个函数&#xff0c;该函数…

c语言野指针产生的原因

点击上方蓝字关注我&#xff0c;了解更多咨询1、指针变量未初始化&#xff0c;任何指针变量刚被创建时不会自动成为 NULL 指针&#xff0c;它的缺省值是随机的。所以&#xff0c;指针变量在创建的同时应当被初始化&#xff0c;要么将指针设置为 NULL &#xff0c;要么让它指向合…

c语言中assert函数的使用注意

点击上方蓝字关注我&#xff0c;了解更多咨询1、使用assert检查函数开始时传入参数的合法性。2、每个assert只检验一个条件&#xff0c;因为在同时检验多个条件时&#xff0c;如果断言失败&#xff0c;就无法直观地判断哪个条件失败。实例int resetBufferSize(int nNewSize) {/…

es 调整gc_实际中进行GC调整

es 调整gc调优垃圾回收与任何其他性能调优活动没有什么不同。 您需要确保您了解当前的情况和所需的结果&#xff0c;而不是因为对应用程序的随机部分进行调整而产生了诱惑。 通常&#xff0c;只需执行以下过程即可&#xff1a; 陈述您的绩效目标 运行测试 测量 与目标比较…

c语言中assert函数是什么

点击上方蓝字关注我&#xff0c;了解更多咨询1、assert将通过检查表达式expresion的值来决定是否需要终止执行程序。2、如果表达式expresion的值是假的(即0)&#xff0c;它将首先向标准错误流stderr打印错误信息。通过调用abort函数终止程序运行。否则&#xff0c;assert没有效…

sci检索没有馆藏号_转变馆藏

sci检索没有馆藏号您是否曾经想替换过HashSet或HashMap使用的equals和hashCode方法&#xff1f; 或者有一个List的一些元素类型伪装成的List相关类型的&#xff1f; 转换集合使这成为可能&#xff0c;并且本文将展示如何实现。 总览 转换集合是LibFX 0.3.0的一项功能&#xf…