C++基础-01

指针

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

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

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

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

数组

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

修改char*指向的内容

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

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

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

void func(int * pi)
{
    cout << "in func : " << sizeof(pi) << endl;
}

int main()
{
    int vec[3] = {0};
    cout << "in main : " << sizeof(vec) << endl;

    func(vec);
}           

//输出
// in main : 12
// in func : 4

常量

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

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

const int c1 = 1;
const int c2 = 2;
//编译期编译器知道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 = 1;
//int &i1 = 2;                       //error
const int &i = 2;
const myInt &mi = a;          //a不是myInt类型,但a可以隐式类型
                                          //转换到myInt
const myInt &mi1 = 2;       //2不是左值    
时间: 2024-08-26 11:47:37

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

安卓基础01

安卓基础01 SDK System images 这是在创建模拟器时需要的system image,也就是在创建模拟器时CPU/ABI项需要选择的,下载并解压后,将解压出的整个文件夹复制或者移动到 your sdk 路径/system-images文件夹下即可, 如果没有 system-images目录就先 创建此文件夹,然后打开SDK Manager,打开Tools(工 具)菜单选择Options(选项)菜单项打开Android SDK Manager Setting对话框,点击Clear C

iOS基础 01 构建HelloWorld,剖析并真机测试

iOS基础 01 构建HelloWorld,剖析并真机测试 前言: 从控制台输出HelloWorld是我们学习各种语言的第一步,也是我们人生中非常重要的一步. 多年之后,我希望我们仍能怀有学习上进的心情,继续以HelloWorld去认识这世界上更多的东西. 本篇以HelloWorld作为切入点,向大家系统介绍什么事iOS应用以及如何使用Xcode创建iOS应用. 目录: 1. 创建HelloWorld工程 1.1. 设计界面 1.2. 真机测试 2. Xcode中的iOS工程模板 2.1. Ap

C#面向对象基础01

面向对象不是取代面向过程的类.对象."人"是类,"张三"是人这个类的对象.类是抽象的,对象是具体的.按钮就是类,某个按钮就是对象.对象可以叫做类的实例.类就像int,对象就像10.字段field(和某个对象相关的变量),字段就是类的状态.人这个 类有姓名.年龄.身高等字段.类不占内存,对象才占内存.方法:方法就是累能够执行的动作,比如问好.吃饭等.类的继承,类之间可以有继承关系,比如电脑类可以从"电器"类继承,这样的好处是"电脑&quo

C#语言基础01

Console.WriteLine("hello"); Console.ReadKey();// 按一个按键继续执行 string s=Console.ReadLine();//用户输入文字的时候程序 是暂停的 ,用户输入玩 必点回车,把用户输入的作为返回值,声明一个string 类型的变量(容器)s,用s来放ReadLine函数返回的值. Console.WriteLine(s); /*inti1=10;int i2=20; Console.WriteLine(i1+ "+

python基础01 Hello World!

作者:徐佳 欢迎转载,也请保留这段声明.谢谢! 摘要:简单的Hello Word! python 命令行 如已经安装python,那么在linux命令行中输入 $python 将进入python.乱吼在命令行提示符>>>后面输入 print ('Hello World!') 随后在屏幕上输出: Hello World! 写一段小程序 另一个使用Python的方法,是写一个Python程序.用文本编辑器写一个.py结尾的文件,比如说hello.py 在hello.py中写入如下,并保存:

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

Linux基础01 学会使用命令帮助 概述 在linux终端,面对命令不知道怎么用,或不记得命令的拼写及参数时,我们需要求助于系统的帮助文档:linux系统内置的帮助文档很详细,通常能解决我们的问题,我们需要掌握如何正确的去使用它们:在只记得部分命令关键字的场合,我们可通过man -k来搜索:需要知道某个命令的简要说明,可以使用whatis:而更详细的介绍,则可用info命令:查看命令在哪个位置,我们需要使用which:而对于命令的具体参数及使用方法,我们需要用到强大的man:下面分别介绍: 命

黑马程序员--Java基础--01基本概念

1.Java的三大技术架构 JAVAEE(Java Platform Enterprise Edition):  开发企业环境下的应用程序,主要针对web程序开发: JAVASE(Java Platform Standard Edition): 完成桌面应用程序的开发,是其他两者的基础 JAVAME(Java Platform Micro Edition): 开发电子消费产品和嵌入式设备,如手机中的程序 我对三大技术构架理解 1.三大技术是指哪三大技术呢? 答:三大技术分别指JAVAEE,JAV

【C++基础 01】堆和栈的概念

好记性不如烂笔头,学习c++的时间也不是很久,趁着这段时间看 <C++ Primer>将学习笔记整理一下,与君共勉. ==================================================================== 首先要区分一下概念: [数据结构的栈和堆] 堆:也叫优先队列,是一棵完全二叉树,它的特点是父节点的值大于(小于)两个子节点的值(分别称为大顶堆和小顶堆).它常用于管理算法执行过程中的信息,应用场景包括堆排序,优先队列等. 栈:具有后进先出性质

AngularJS基础01 从HelloWorld说起

作者:arccosxy  转载请注明出处:http://www.cnblogs.com/arccosxy/ 准备工作 首先,创建一个名为index.html的HTML文件,代码如下: <!DOCTYPE html> <head> <title>Learning AngularJS</title> </head> <body> </body> </html> 接下来就是加载angular.js库,访问https:

Java基础01 从HelloWorld到面向对象(转载)

Java是完全面向对象的语言.Java通过虚拟机的运行机制,实现“跨平台”的理念. "Hello World!" public class HelloWorld{    public static void main(String[] args){        System.out.println("Hello World!");    }} 程序中包括Java的一些基本特征: 类(class):上面程序定义了一个类HelloWorld,该类的名字与.java文件