由于C++基础非常重要,所以打算把平时重学C++的总结,抽时间上传到博客!

1.切勿乱用带符号类型和无符号类型

#include <iostream>
using namespace std; int main()
{
    unsigned u = 10;
    int i = -42;     cout<<i+i<<endl; //输出-84
    cout<<u+i<<endl;//如果整型int占32位,输出4294967264,即这个负数+无符号数的模     return 0;
}

2.变量声明和定义的关系

● 如果想声明一个变量而非定义它,就在变量名前添加关键字extern,而且不要显示的初始化变量,extern如果包含初始值就不再是声明,而变成了定义了;

extern int I;                             //声明i而非定义i

int j;                                        //声明并定义j

extern double pi = 3.1456;    //定义

● 变量能且只能被定义一次,但是可以被多次声明;

● 变量的定义必须出现在且只能出现在一个文件中,而其他文件用到该变量的文件必须对其进行声明,却绝不能重复定义

    t1.h
    #ifndef _t1_H
    #define _t1_H
    int p = 20;
    #endif     t1.cpp
    #include <iostream>
    #include "t1.h"
    using namespace std;
    //extern int p = 10;          //不能重复定义,报错  
    extern int p ;                //声明p已经在t1.h中定义
    int main()
    {
        cout<<p<<endl;            //20
        return 0;
    }

3. 复合类型

引用,引用即别名,引用并非对象,它只是为一个已经存在的对象所起的另外一个名字,引用必须初始化。

int i = 1024,i2 = 2048;      //i和i2都是int

int &r = i, r2 = i2;             //r是一个引用,与i绑定在一起,r2是int

int &refVal1 = 10;          //错误:引用类型的初始值必须是一个对象

double dval = 3.14;

int &refVal2 = dval;          //错误:此处引用类型的初始值必须是int型对象

● 指针,与引用类似,指针也实现了对其他对象的间接访问

double dval;
double *pd = &dval;        //正确:初始值是double型对象的地址
double *pd2 = pd;          //正确:初始值是是指向double对象的指针
int *pi = pd;              //错误:指针pi的类型和pd的类型不匹配
pi = &dval;                //错误:试图把double型对象的地址赋值给int型指针 int i = 42;                        
int *p ;                   //p是一个int型指针
int *&r = p;               //r是一个对指针p的引用(最简单的方法就是从右向左阅读r的定义,离变量名最近的符号(此例中是&r的符号&)对变量的类型有最直接的影响,因此r是一个引用。声明符的其余部分用以确定r引用的类型是什么,此例中的符号*是说明r引用的是一个指针。最后,声明的基本数据类型部分指出r引用的是一个int指针)

不同点:1.指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象。

2.指针无须在定义时赋初值,和其它内置类型一样,在块作用域内定义的指针如果没有被初始化,也将有一个不确定的值

4.const限定符

1)const 对象一旦创建后其值就不能再改变,所以const对象必须初始化

const int i = get_size();       //正确:运行时初始化

const int j = 42;                  //正确:编译时初始化

const int k ;                        //错误:k是一个未经初始化的常量

2)如果想在多个文件之间共享const 对象,必须在变量的定义之前添加extern关键字

//file_1.cc 定义 并初始化了一个常量,该常量能被其他文件访问

extern const int bufsize = fcn();

//file_1.h头文件

extern const int bufsize;     //与file_1.cc中定义的bufsize是同一个

3)默认状态下,const对象仅在文件内有效(为了支持这一用法,同时避免对同一变量的重复定义,默认情况下,const对象被设定为仅在文件内有效。当多个文件中出现了同名的const变量时,其实等同于在不同的文件中分别定义了不同的变量。)

重学C++ (一)基础回顾的更多相关文章

  1. 【重学Git】基础命令篇

    1.git commit :在提交树中增加一个提交节点,注意:分支是指向提交节点的. 2.git branch newImage : 表示创建一个名为newImage的分支. 3.git checko ...

  2. 重学js之JavaScript 面向对象的程序设计(创建对象)

    注意: 本文章为 <重学js之JavaScript高级程序设计>系列第五章[JavaScript引用类型]. 关于<重学js之JavaScript高级程序设计>是重新回顾js基 ...

  3. 重学hadoop技术

    最近因为做了些和hadoop相关的项目(虽然主要是运维),但是这段经历让我对hadoop的实际运用有了更加深入的理解. 相比以前自学hadoop,因为没有实战场景以及良好的大数据学习氛围,现在回顾下的 ...

  4. 1、java基础回顾与加强

    一.    基础回顾 1   集合 1.1  集合的类型与各自的特性 ---|Collection: 单列集合 ---|List: 有存储顺序, 可重复 ---|ArrayList:    数组实现, ...

  5. 推翻自己和过往,重学自定义View

    http://blog.csdn.net/lfdfhl/article/details/51671038 深入探讨Android异步精髓Handler 站在源码的肩膀上全解Scroller工作机制 A ...

  6. JavaScript基础回顾一(类型、值和变量)

    请看代码并思考输出结果 var scope = 'global'; function f(){ console.log(scope); var scope = 'local'; console.log ...

  7. python高级(1)—— 基础回顾1

    Python基础回顾 认识变量 在学习了之前的Python零基础入门系列[洗礼灵魂,修炼Python](说明一下,这个系列现在回过来再来看这个名字确实好土啊,然后有些知识点感觉还不太精准,后期看如果有 ...

  8. 重学Java(一):与《Java编程思想》的不解之缘

    说起来非常惭愧,我在 2008 年的时候就接触了 Java,但一直到现在(2018 年 10 月 10 日),基础知识依然非常薄弱.用一句话自嘲就是:十年 IT 老兵,Java 菜鸡一枚. 于是,我想 ...

  9. Python重学记录1

    写下这个标题觉得可笑,其实本人2014年就自学过一次python,当时看的是中谷教育的milo老师的视频,也跟着写了一些代码,只是因为当时工作上用不到也就淡忘了.不过说实话当时的水平也很低下,本来也没 ...

  10. 重学 Java 设计模式:实战抽象工厂模式

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!

随机推荐

  1. C语言转义序列

    转义序列 含义 \a 报警(ANSIC) \b 退格 \f 换页 \n 换行 \r 回车 \t 水平制表符 \v 垂直制表符 \\ 反斜杆\ \' 单引号 \" 双引号 \? 问号 \0oo ...

  2. Java简单认识及环境下载

    Java的特性和优势 简单性 面向对象 可移植性 跨平台性 write once run anywhere 高性能 分布式 动态性 反射 多线程 安全性 健壮性 Java三大版本 JavaSE:标准版 ...

  3. 简单的python格网算法算数据密集度demo

    # 格网算法计算数据集区域数据密集度 import time import random import numpy as np import pandas as pd # 模拟数据集 def crea ...

  4. windows安装WinDump

    1.下载软件,放在C盘: WinDump.exehttps://www.winpcap.org/windump/install/default.htmWinPcap_4_1_3.exe(windows ...

  5. 4.javaweb-thymeleaf

    1.知识回顾: 1. post提交方式下的设置编码,防止中文乱码 request.setCharacterEncoding("utf-8"); get提交方式,tomcat8开始, ...

  6. C# 循环给多个连续编号的控件赋值

    C# 循环给多个连续编号的控件赋值 我们经常在 winform 界面上用很多文本框用来显示一组数据,文本框前面有Label标识.我们得到的数据也经常是一个list 或者数组的形式的.需要给这些文本框赋 ...

  7. 安装Win11需要网络才能下一步怎么跳过

    1.先Shift+F10打开命令提示符 2.运行C:\Windows\System32\oobe\BypassNRO.cmd 3.自动重启来到联网这一步,多了一个没有网络的选项,进入.

  8. Java--接口和抽象类有什么区别

    他们都不能实例化对象,都可以包含抽象方法,而且抽象方法必须被继承的类全部实现. 区别: 1.抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实 ...

  9. kafka-集群搭建及启动脚本

    集群搭建: [root@localhost kafka_2.11-0.10.2.1]# cat config/server.properties | grep -v ^$ | grep -v ^# b ...

  10. OD机试题-2022.4

    import java.util.ArrayList;import java.util.Comparator;import java.util.List;import java.util.Scanne ...