C++ 墙角知识 04 我是用C++来写C的程序员.

来源:互联网 发布:大数据测试工程师 编辑:程序博客网 时间:2024/06/10 05:44

数组的元素应该为对象,因此不存在 引用的数组.

不允许使用一个数组初始化另一个数组,也不允许把一个数组赋值给另一个数组.

int * a[10]; 没有括号的情况,这定义一个数组,里面是 指针.
int (*a) [10]; 有括号时, 定义一个指针, 指向 int a[10]; 这样的数组.
int (&a) [10]; 有括号时,定义一个引用, 引用 int a[10]; 这样的数组.
可以由内向外阅读 这样的声明.

size_t是一种机器相关的 无符号类型,它被设计的足够大,能表示内存中任意对象的大小. 在 #include < cstddef.h>

维度是数组类型的一部分.

任何出现字符串字面值的地方都可以用以空字符结束的字符数组来替代.

我是用C++来写C的程序员.

因为数组和指针好像一样,
所以以\0结尾的数组 和 字符串 也很像.

但是如果一处地方需要C字符串,无法直接用string来代替它.
为此,string提供了一个c_str()的函数, 该函数返回C风格的字符串.
也就是说,该函数的返回结果是一个指针.指向以空字符结尾的 字符数组.
结果指针类型是 const char *

不保证c_str()返回的数组一直有效,如果要长期使用的话,最好是自己再拷贝一份吧.

使用数组,初始化vector, 只需要指明数组首地址,和尾后地址 就可以了.
int a[] = {1,2,3};
vector < int> ivec(a, a+3);

缓冲区溢出的主要原因是 使用越界的索引访问 数组,vector,string等.

想要使用类模板,想要提供关于类型的辅助信息.
如 vector< int> a;

0 0
原创粉丝点击