指针

- 指针的基本操作间接引用指针所指向的对象

- 机器一般按字节寻址,所以能够独立分配的最小空间是1字节,也就是说指针指向的

最小空间为1字节。特别地,对于bool变量,虽然实际需要的是1bit,但其大小是1字节。

如果需要更小的空间,可以使用按位运算或者位域

数组

- char*可以用字符常量来初始化,字符常量是静态存储,存放在字符常量区,所以不可以char*

修改char*指向的内容

- 字符数组也可以用字符常量来初始化,但是字符数组存放的是字符常量的一个拷贝,存储在栈上,

所以可以修改字符数组的内容

- 数组作为函数参数时退化为指针:

void func(int * pi)
{
cout << "in func : " << sizeof(pi) << endl;
} int main()
{
int vec[] = {};
cout << "in main : " << sizeof(vec) << endl; func(vec);
} //输出
// in main : 12
// in func : 4

常量

- 不允许对常量赋值,所以定义常量时必须初始化

- 但是,定义常量时不一定为常量分配内存,视编译器具体实现而定

const int c1 = ;
const int c2 = ;
//编译期编译器知道c1、c2的值,可以进行常量折叠,也就是说,直接
//用具体数值1、2代替c1、c2,所以不需要内存 const int c3 = f();
//对于常量c3,编译器并不知道它存放的数据,不能进行常量折叠,
//所以需要内存 //另外,如果对常量进行取地址操作就必须分配内存
const int *p = &c2; //需要为c2分配内存

- 指针常量和常量指针(从右往左读,*号左边内容就是指针指向的类型)

const int *p1;    //p1是一个指针,指向const int
int *const p2; //p2是一个const指针,指向int

引用

- 不可以修改引用指向的对象,定义时必须初始化

- 对引用进行取地址返回的是引用指向的对象的地址

- T &只能用T类型的左值来初始化

- const T&可以不用左值,甚至不需要T类型来初始化

不是T类型时,需要一个到T类型的隐式类型转换

不是左值时,先创建一个临时变量,再用临时变量来初始化引用类型

- 返回引用类型的函数可以作为左值或者右值

int a = ;
//int &i1 = 2; //error
const int &i = ;
const myInt &mi = a; //a不是myInt类型,但a可以隐式类型
//转换到myInt
const myInt &mi1 = ; //2不是左值

C++基础-01的更多相关文章

  1. javascript基础01

    javascript基础01 Javascript能做些什么? 给予页面灵魂,让页面可以动起来,包括动态的数据,动态的标签,动态的样式等等. 如实现到轮播图.拖拽.放大镜等,而动态的数据就好比不像没有 ...

  2. Androd核心基础01

    Androd核心基础01包含的主要内容如下 Android版本简介 Android体系结构 JVM和DVM的区别 常见adb命令操作 Android工程目录结构 点击事件的四种形式 电话拨号器Demo ...

  3. java基础学习05(面向对象基础01)

    面向对象基础01 1.理解面向对象的概念 2.掌握类与对象的概念3.掌握类的封装性4.掌握类构造方法的使用 实现的目标 1.类与对象的关系.定义.使用 2.对象的创建格式,可以创建多个对象3.对象的内 ...

  4. Linux基础01 学会使用命令帮助

    Linux基础01 学会使用命令帮助 概述 在linux终端,面对命令不知道怎么用,或不记得命令的拼写及参数时,我们需要求助于系统的帮助文档:linux系统内置的帮助文档很详细,通常能解决我们的问题, ...

  5. 可满足性模块理论(SMT)基础 - 01 - 自动机和斯皮尔伯格算术

    可满足性模块理论(SMT)基础 - 01 - 自动机和斯皮尔伯格算术 前言 如果,我们只给出一个数学问题的(比如一道数独题)约束条件,是否有程序可以自动求出一个解? 可满足性模理论(SMT - Sat ...

  6. LibreOJ 2003. 「SDOI2017」新生舞会 基础01分数规划 最大权匹配

    #2003. 「SDOI2017」新生舞会 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  7. java基础 01

    java基础01 1. /** * JDK: (Java Development ToolKit) java开发工具包.JDK是整个java的核心! * 包括了java运行环境 JRE(Java Ru ...

  8. 081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字

    081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字 本文知识点:new关键字 说明:因为时间紧张,本人写博客过程中只是 ...

  9. 080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则

    080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则 本文知识点:单一职责原则 说明:因为时间紧张,本人写博客过程中只是 ...

  10. 079 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 04 实例化对象

    079 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 04 实例化对象 本文知识点:实例化对象 说明:因为时间紧张,本人写博客过程中只是对知 ...

随机推荐

  1. 在linux中配置安装telnet服务

    Telnet 是一种流行的用于通过 Internet 登录到远程计算机的协议.Telnet 服务器软件包为远程登录主机提供了支持.要通过 Telnet 协议与另一台主机通讯,您可以使用名称或 Inte ...

  2. js prepend() 和append()区别

    prepend() 方法在被选元素的开头(仍位于内部)插入指定内容.prepend() 语法:$(selector).prepend(content) 或 $(selector).prepend(fu ...

  3. your PC ran into a problem and needs to restart system_thrread_exception_not_handled

  4. Drools规则

    1.实现业务逻辑和业务规则的分离,实现业务规则的集中管理 2.可以动态的改变业务规则,从而快速响应需求变更 3.业务分析人员也可以参与编辑.维护系统的业务规则 fact:一个普通的JavaBean插入 ...

  5. ubuntu修改设备名称

    按住ctrl+alt+t打开终端 输入 sudo gedit /etc/hostname 出现一个打开的文件,显示的就是你的设备名字,也就是终端@的那个名字.将其修改成你想显示的名字,保存重启系统就可 ...

  6. pycharm 注册码

    43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...

  7. R&Rstudio安装各种包

    安装rCharts的方法 install.packages('devtools') library(devtools) require(devtools) install_github('ramnat ...

  8. android 多线程下载

    看代码: public class MainActivity extends AppCompatActivity { private final String TAG = MainActivity.c ...

  9. apache配置多域名多站点记录

    <VirtualHost *:80>  DocumentRoot "/mnt/web/www.*.cn"  ServerName www.*.cn  ErrorLog ...

  10. PHP开发网站之微信登录、绑定

    )))刷新access_token()); ); ); curl_setopt($curlobj, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curlo ...