C++ 墙角知识 04 我是用C++来写C的程序员.
2015-09-09 08:33
281 查看
数组的元素应该为对象,因此不存在 引用的数组.
不允许使用一个数组初始化另一个数组,也不允许把一个数组赋值给另一个数组.
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;
不允许使用一个数组初始化另一个数组,也不允许把一个数组赋值给另一个数组.
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;
相关文章推荐
- C++ <字符串转int类型并求和>
- c++常见面试题30道
- Leetcode Minimum Path Sum
- 【c++ 一些比较细节的知识点】函数指针
- C/C++基本数据类型及字长 (经常忘)
- C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
- 深入解析C++中的虚函数与多态
- 使用MSYS、Notepad++搭建C/C++开发环境
- C++常见内存错误及解决方案
- visual c++中预定义的宏
- c++ primer读书笔记之c++11(二)
- c++ primer读书笔记之c++11(一)
- c++ primer读书笔记之c++11(四)
- 2015-06学习总结——c++
- c++ primer读书笔记之c++11(三)
- c语言中条件编译相关的预编译指令
- c++中虚函数和纯虚函数的作用与区别
- C++ <int、long、long long 最大及最小值>
- C语言中sizeof和strlen的区别与联系
- 深入分析C++中声明与定义的区别