4.1——数组和指针

数组和指针:

在C++程序中,尽量使用vector,只有在追求程序速度的时候才在类里使用数组和指针。

4.1 数组:

(1)特殊的字符数组一定要记得添加'\0'。

(2)数组不能直接复制和赋值。

 

4.2 指针的引入

(1)指针用于指向对象。

(2)指针值保存的是对象的地址。

指针定义个初始化:

(1)很多运行时错误都是源于使用了未初始化的指针。

void* 指针

(1)C++提供void*指针,可以保存任何对象的地址。

(2)void*表明该指针与一地址相关,只是不知道这个地址上存储的对象的类型。

(3)void*只支持有限的操作:与另一个指针比较,向函数传递void*指针或者返回void*指针,

       给另一个void*指针赋值。

(4)不允许使用void*指针操纵它所指向的对象。

指针与引用的比较:

(1)引用总是关联着某个对象,所以在定义引用时没有初始化是错误的。

(2)给引用赋值的差别,给引用赋值是修改与该引用所关联的值,而并不是使引用与另一个对象相关联。

(3)引用一旦定义就始终指向(关联)着这个对象。

指针与数组:

(1)在表达式中使用数组名时,该名字会自动转换指向数组第一个元素的指针。

(2)C++中允许计算数组或对象超出末端的位置,但不允许对这些地址进行解引用操作。

指针与const限定符:

指向const对象的指针:

(1)const double *ptr  ptr为指向const对象的指针,即不能通过这个指针来修改它所指向的值。但是可以修改这个指针本身

(2)自以为指向const的指针,也可以用指向const对象的指针指向非const的对象。

(3)不能使用void*指针保存const对象的地址,而要用const void*指针。

const指针:

(1)int a;int* const ptr=&a;

(2)const指针值不能修改,也就意味着不能使其又去指向另外一个值。

(3)指针所指对象的值能否修改完全取决于该对象的类型。

指向const对象的const指针:const double *const ptr。

指针和typedef:

(1)typedef string *pstring;  const  pstring  pstr;

       这里const修饰的是pstring这个类型,所以pstr应该是指向string对象的const指针。

C风格字符串:

(1)C++通过(const)char* 指针来操作C风格的字符串,以空字符结束。

(2)cstring是C++处理c风格字符串函数的头文件,而string.h是C语言提供的。

C++处理c风格字符串函数:

(1)传递给这些标准库函数例程的指针必须具有非零值,并且指向以 null 结束 的字符数组中的第一个元素。

(2)永远不要忘记字符串结束符 null

(3)调用者必须确保目标字符串具有足够的大小

函数:

(1)strlen(s) ——返回 s 的长度,不包括字符串结束符 null

(2)strcmp(s1, s2)—— 比较两个字符串 s1 和 s2 是否相同。若 s1 与 s2 相等,返 回 0;若 s1 大于 s2,

       返回正数;若 s1 小于 s2则返回负数

(3)strcat(s1, s2) ——将字符串 s2 连接到 s1 后,并返回 s1

(4)strcpy(s1, s2) ——将 s2 复制给 s1,并返回 s1

(5)strncat(s1, s2,n)——将 s2 的前 n 个字符连接到 s1 后面,并返回 s1

(6)strncpy(s1, s2, n)——将 s2 的前 n 个字符复制给 s1,并返回 s1。

 

4.4 创建动态数组

(1)每一个程序在执行时都占用一块可用的内存空间,用于存放动态分配的对 象,此内存空间称为程序的自由存储区或堆。

(2)C 语言程序使用一对标准库函数malloc 和 free 在自由存储区中分配存储空间,而 C++ 语言则

       使用 new 和 delete 表达式实现相同的功能。

动态数组初始化:

(1)string *psa = new string[10];这个初始化了,而int *pia = new int[10];没有初始化。

(2)int *pia2 = new int[10] (); 圆括号要求编译器对数组做值初始化,在本例中即把数组元素都设置为 0。

(3)对于动态分配的数组,其元素只能初始化为元素类型的默认值, 而不能像数组变量一样,用初始化列表

       为数组元素提供各不相 同的初值。

(4)如果我们在自由存储区中创建的数组存储了内置类型的 const 对象,则必 须为这个数组提供初始化:

       因为数组元素都是 const 对象,无法赋值。实现这 个要求的唯一方法是对数组做值初始化。

动态空间的释放:

(1)C++ 语言为指针提供 delete [] 表达式释放指针所指向的数组 空间。delete [] pia;

(2)方括号告诉编译器该指针指向 的是自由存储区中的数组,而并非单个对象。

(3)如果遗漏了空方括号对,这是一个编译器无法发现的错误,将 导致程序在运行时出错。

转载于:https://www.cnblogs.com/yanliang12138/p/4780783.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值