c++ primer---读书笔记4

数组必须用值大于等于1的常量表达式定义。
非const变量或者运行期才知道值的const变量都不能用了做维数。

如果没有显示提供元素初值,数组会像普通变量一样初始化。
与vector不同,数组不能通过变量间赋值进行初始化。

数组元素访问,通过下标(size_t).就像vector通过(size_type)一样。

 

指针与引用的区别:
引用总是指向某个对象,定义引用时没有初始化是错误的。
赋值行为的差别:给引用赋值改变的是引用所关联对象的值,而不是使引用与另一
个对象关联。

指针减法操作的结果是标准库类型的ptrdiff_t,再cstddef中定义。
size_t是unsigned型,ptrdiff_t是signed型。都是与机器相关的类型。

c++运行计算数组或对象超出末端的地址,但是对该地址的解引用操作时不允许的
。而计算数组末端之后和首地址之前的地址都是非法的。

指向const对象的指针可以被赋值为非const对象的地址。可以理解为自以为指向
const的指针。
double a = 1.0;
const double *p = &a;

const指针:指针指向地址不能改变,但是地址内的内容可以改变
int errnumb = 0;
int* const perr= &errnumb;

指向const对象的const指针:既不能改变地址,也不能改变地址内的值。
const double pi = 3.14;
const double* const ppi = π

指针与typedef:
typedef string *pstring;
const pstring p; //实际定义了一个指向string的const指针。

c++支持c风格字符串,但应尽量少用。cstring库。

c中使用标准库malloc free分配释放堆内存。
c++中使用new,delete表达式分配释放内存。

创建动态数组:
int *pia = new int[10]; //未初始化。
int *pia2 = new int[10](); //要求编译器初始化。

注意:c++不允许定义长度为0的数组变量;但是允许new元素数为0的数组(而且是
非0指针)。

释放:(如果缺少[]可能会导致内存泄露)
delete []pia;

混合使用string和c风格字符串
1.可以使用c风格字符串为string对象初始化或者赋值。
2.c风格字符串可以做+的一个操作数;或者复合赋值运算符的右操作数。
反之不成立。

可以同过c_str()函数返回指针指向const char数组的指针。
const char *pstr = st2.c_str();

使用数组初始化vector:
const size_t arr_size = 6;
int int_arr[arr_size] = {1,2,3,4,5,6};
vector<int> v1(int_arr, int_arr+arr_size); //取之间的元素,不包含最后一
个。


多维数组:本质上没有多维数组。
int *ip[4]; //指向int的指针数组。
int (*ip)[4]; //指向int数组的指针

使用typedef简化多维数组的使用:
int ia[3][4];
typedef int int_array[4];
int_array *ip = ia;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值