【23.12.27、28笔记】C++ Primer自学 Day2-3

二、C++浏览

1、内置数组数据类型【array】

        数组是一种顺序容器,包含单一类型的元素。

        数组的下标从0开始。【容易发生“一位偏移错误”,导致越界】

        C++对数组的支持,仅限于对其中单个元素进行操作,不支持数组的抽象和对整个数组的操作。【譬如不能直接把一个数组复制给另一个使用】

Q1:为什么内置数组类型不支持数组之间的赋值,支持这样的赋值需要什么信息?

        {需要数组中元素的数据类型,数组的长度等信息}因为在创建数组时,内存大小的类型已经被确定了。

Q2:一等公民的数组应该支持怎样的操作?

          直接赋值,直接比较等等

2、动态内存分配和指针

        C++中的对象分配内存可以动态分配也可以静态分配。

        静态分配:编译器在处理程序源代码时分配内存。【程序执行前】

        动态分配:程序执行时调用运行时刻库函数来分配。

静态分配实例:指示器分配足够的储存区给变量

int ival1 = 1024;

        有两个值和对象ival有关系,一个是储存的值,另一个是它的地址。可以通过指针来访问地址:其中&是取址符,能返回对象的地址,*是解引用符,用于访问其地址指向的对象。【指针的主要作用并不在此,而是在于管理和操作动态空间】

int *p; //一个指向int类型的指针
int *p1;
p = &ival; //让p指向ival地址
*p = *p+1; //等价于 ival = ival+1

        静态动态主要区别:1、是否能直接对对象进行操作;2、对象的分配和释放是否需要自己管理。【对于动态需要new和delete表达式来管理】

        new的两种表达式:

int *p = new int(1024);//使用小括号分配一个int类型的对象,但是它没有名字,只返回其动态分配的地址。
int *p = new int[4];//使用中括号分配一个int类型的数组对象,但是不能赋值,返回的也是地址

        delete的两种表达式:

delete p; //删除单个对象
delete []p;//删除一个对象数组

        动态分配的内存一定要显式地去删除,否则会出现内存泄漏的问题【泄漏指的是,我们动态分配了内存后,如果没有返还,下次使用时,就没有指向这个地址的指针,再用不了这个内存,相当于泄漏了】。

Q1:说出下面定义的四个对象之间的区别
                (a) int ival = 1024; (c) int *pi2 = new int( 1024 );
                (b) int *pi = &ival; (d) int *pi3 = new int[ 1024 ];
        a和b一个是声明的变量,一个声明的是指向变量的指针,两者使用的内存都是静态的内存;c和d都是使用new声明的动态内存,c是整型,d是数组。
Q2:下面的代码段是做什么的,有什么严重错误?注意:指针 pia 的下标操作符的用法是正
确的 在 3.9.2 节中我们会解释其理由
                int *pi = new int( 10 );
                int *pia = new int[ 10 ];
                while ( *pi < 10 ) {
                pia[ *pi ] = *pi;
                *pi = *pi + 1;
                }
                delete pi;
                delete [] pia;
            因为在循环中,使用的是pi这个指针,然而指针指向的动态内存只声明了一个整型变量,可能存在越界的问题。

3、基于对象的设计

        类的一般形式:

class  classname{
public:
//公共接口
private:
//私有接口
};

        其中:class、public、private是C++语言的关键字,classname是用户定义的标志符。创建完之后,相当于新加了一个数据类型,在使用时,可以和基本的类型一样使用:

// 单个 IntArray 类对象
IntArray myArray; 
// 指向 IntArray 类对象的指针
IntArray *pArray = new IntArray;

        类体内包含成员定义以及访问标签【public、private】,类的成员包括函数和变量。

        两种访问成员的方式:对于类的对象,使用.;对于类的指针对象,使用->。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值