首页 > 编程语言 >c++学习

c++学习

时间:2024-07-12 22:09:10浏览次数:8  
标签:变量 int c++ 学习 引用 类型 指针

20240712

最近开始看候捷的c++视频,视频是从类开始讲的,过程中发现很多c的知识有点忘了,而且c++也有很多新的语法特性。因此看完前几个视频后花点时间过一下c++ primer前六章,记录一下需要学习的c++新特性和代码规范。

  • 学引用时有点乱,抽时间搞一下值类型的总结

#第二章

基本类型

long long类型:64位

  1. 数值不为负时使用unsinged,这里尤其要注意循环的使用

错误例子:

//死循环代码
for(unsigned a =10; a>=0; a--)
  1. 最优先使用的类型:整数int,浮点数double,超越int范围long long

  2. char在一些机器上是有符号的而一些上是无符号的,因此使用时要明确指定signed char或者unsigned char

变量

  1. 字面值常量,其形式和类型决定它的数据类型,可以使用前缀或者后缀进行指定

  2. c++11新特性,列表初始化

  • 统一语法:使用花括号{}进行初始化。

  • 自动避免窄化转换:在列表初始化中,如果初始化过程会导致数据丢失(如,从 double 到 int 的转换),编译器会报错。

    int a{1.1};
    
  • 适用于所有类型:包括 POD(Plain Old Data)类型、聚合类型、类类型等。

  1. 变量的声明与定义:用于分离式编译
  • 变量声明规定变量的类型与名字,使用关键字 extern

  • 定义则在声明的基础上为之申请存储空间

extern int a;/声明
int a;//声明并定义
extern int a = 1;//定义

变量只能被定义一次,但能够进行多次声明。在多个文件中使用同一个变量时,其定义只能出现在一个文件中,其他使用时需进行声明。

  • 类型检查:c++作为静态类型语言,编译器在编译阶段对变量进行类型检查,因此在使用变量时必须进行声明,也就是说赋予其类型。
  1. 注意作用域与作用域操作符

复合类型

这里由于&,*这两个符号的多重意义,在作为声明的一部分出现时最好和数据类型写在一起

引用

c++11中分为左值引用、常量左值引用、右值引用。这里先只学习左值引用

  1. 左值引用(即通常意义下的引用)

语法:

int a=1;
int& refa1=a;//refa是对a的引用
int b=1;
  • 引用即别名:引用不是新定义一个变量,而是给已存在的变量取了一个别名,它和它引用的变量共用同一块内存空间。引用只能绑定对象,而引用本身不是对象,是别名。

  • 引用在定义时必须初始化,而不能先声明再赋值。而且类型必须严格匹配。只能绑定左值而不能绑定。

    int& refa2; refa = 2a;//报错
    double& dref = a;//报错
    int& ref10 = 10;//错误,10为字面值常量,右值
    string str = "abc"; string &s = str;//正确。字符串字面值为左值
    
  • 引用不能重新绑定

&refa1=b;//报错 lvalue required as left operand of assignment,=的左值是一个常量
  • 一个变量可以有多个引用,同时一个引用也可以继续引用。

    int& refa2=a;//正确
    int& ref=refa1;//正确。refa1即使a的别名,均会与a进行绑定
    

指针

  1. 语法:数据类型* 指针变量名;

指针是一个变量,存储另一个变量的内存地址。声明中指针的类型用于指定它所指向对象的类型

int a=1;
int* p1;
p1 = &a;//&作为取址符,p中存放a的地址。因此p是一个指向int的指针
p1 = a;//报错
double* p2 = &a;//报错
std::cout<<*p1;//输出1,解引用符*来访问指针指向的对象。
*p1 = 2;
std::cout<<a;//输出2
  1. 指针值总会是下列四种状态之一:
  • 指向一个对象的地址

  • 指向紧邻对象所占空间的下一个位置

  • 空指针,意味着指针没有指向任何对象。其地址为0,任何程序数据都不会存储在地址为0的内存块中,它是被操作系统预留的内存块。

    int* p = NULL;
    int* p = nullptr;//优先使用
    int* p = 0;
    std::cout<<p;//输出0
    
  • 无效指针(野指针),上述情况之外的其他值。未经初始化的指针就是个无效指针,任何一个指针变量在做解地址操作前,都必须保证它指向的是有效的、可用的内存块,否则会出现无法预料的错误,而编译器无法检查出此类错误。所以在定义指针变量的时候一定要进行初始化如果实在是不知道指针的指向,则初始化为空指针。

  1. void* 指针

    void* 可以存放任何类型的地址,而不能访问其对象

    int a=1;
    void* p = &a;
    std::cout<<p;//正确,输出a的地址
    std::count<<*p;//报错 'void*' is not a pointer-to-object type
    
  2. 指向指针的指针

    通过*的个数区分指针的级别,

    int a = 1;
    int* p = &a;
    int** pp = &p;
    
  3. 指向指针的引用

    int i = 1;
    int* p = nullptr;
    int*& r = p;//从右往左读,&说明r是一个引用,*说明r引用的是一个指针,int说明r引用的指针的类型是int 
    r = &i;//相当于令p指向了i;
    *r = 0;//将i的值改为0;
    
    

标签:变量,int,c++,学习,引用,类型,指针
From: https://www.cnblogs.com/gqzz/p/18299470

相关文章

  • [学习笔记] 长链剖分 - 图论
    长链剖分字面意思,不同于重链剖分,每次选取最长的树链进行剖分,直到剖完为止。其原理和重链剖分相似。建议学习长链剖分前,先学习重链剖分。重链剖分能做的,长链剖分都能做(当然不包括找重儿子),长链剖分还能以\(O(nlogn)-O(1)\)的优秀复杂度找到\(k\)级祖先(当前节点的第\(k\)个......
  • C++中的多态
    抽象类概念在虚函数的后面写上=0,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。派生类继承后也不能实例化出对象,只有重写纯虚函数,派生类才能实例化出对象。纯虚函数规范了派生类必须重写,另外纯虚函数更体现出了接口继承。......
  • 学习C语言第一天
    今天看了B站上的几节课,总结了以下几个要点:1.githud,码云两个网站实现代码托管,坚持上传代码。2.CSDN坚持写博客,善于总结包括xmind。3.不做伸手党,要学会自己解决问题。4.操作系统,计算机网络+网络编程,比较难,上课要认真,还需要看书补偿。5.数据结构要听懂。6.介绍了课程安排。7.了解......
  • GPT的tkinter学习之路 (1)
    这是一份文档来记录自己入门python图形化(tkinter)开发的过程(o′┏▽┓`o)justanoobhere本文的学习路径基于GPT,命令GPT充当老师,并给出示例2024/7/11Task1:创建主窗口importtkinterastk#创建主窗口root=tk.Tk()root.title("Tkinter基础窗口")root.geometry("......
  • C++中的引用
        在C++中,我们要学习一个新的概念,叫做引用。引用不是对象,它只是给变量取一个别名。就好比,我们每个人总会右一下外号,或者是小名。当朋友或者家长不管是直接叫你的名字,还是叫你的小名,你都会答应。引用的概念和定义    引用不是定义一个新变量,而是给已存在的......
  • 深度学习:从数据采集到模型测试的全面指南
    摘要随着人工智能和大数据技术的迅猛发展,深度学习已成为解决复杂问题的有力工具。然而,从项目启动到模型部署,包含了数据处理和模型研发的多个环节,每个环节的细致和严谨性直接决定了最终模型的性能和可靠性。本论文详细探讨了大数据和深度学习项目的研发流程,包括数据采集、数......
  • python每日学习4:函数的定义和各类参数定义与用法
    目录目录一、函数的定义二、参数的定义和用法1、必选参数2、默认参数3、可变参数4、关键字参数5、命名关键字参数三、参数在实际操作中的要求一、函数的定义1、函数代码块以def关键词开头,后接函数名称和圆括号()2、在圆括号内定义传入参数3、函数的第一行语句可以......
  • Activity工作流引擎学习笔记(一)
    工作流的概念  工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。工作流管理系统(WorkflowManagem......
  • 【学习记录】”搭建属于自己的博客论坛“
        我们这里搭建的博客论坛是Discuz论坛。    1.准备前置工作        Discuz论坛安装在Linux的CentOS7上(这里暂时不考虑买服务器,因为买了的效果和我接下来学习的步骤基本类似,如果有需要可自行购买。)对于纯小白来说我们的前置工作是下载一个VMware......
  • #第3课C++的变量与输入(cin)
    上一节课我们学习了输出(cout),这节课我们将要学习变量与输入,而这些都需要搭配昨天的输出来写,所以昨天的课很重要,不太扎实的同学请看上一讲。在学习今天的课之前我们先来认识几个变量类型:  具体类型字节长度取值范围   int4字节(32位)       -2147483648......