-
指针
是一个存放对象地址的值,既可以指向一个对象,还可以指向一个函数
-
对一个函数所能做的操作只有2种
-
调用函数
-
获取它的地址
-
-
函数指针
示例
void f(int a, int b); // 声明了一个函数指针,名字叫fp,指向的函数类型是两个int参数、void返回值的函数 void (*fp)(int, int);
由于对函数的操作只能有两种,所以以下两种方式等价
fp = &f; fp = f;
函数作为参数时,编译器也会悄悄的把函数参数转换为一个指向函数的指针
-
数组
-
数组名表示指向数组首元素的指针
-
指针是一个随机读写迭代器
因此这样的用法可以用在库算法中
vector<double> v; int a[] = {1, 2, 3}; copy(a, a + 3, back_inserter(v));
-
指针可以随便乱指,可能超出数组范围,但是它有效,只是不可预测
-
字符串常量本质是一个字符常量数组
"hello" <----> const char hello[] = {'h', 'e', 'l', 'l', 'o', '\0'};
结尾处的’\0’用于标识结束,但是 strlen(hello)是不算后面的’\0’的,所以还是返回5。
所以,一个字符串常量其实是一个地址。
所以 std::string类型和字符串常量是两种东西,常量字符串是C++核心,std::string是标准库里面的。
-
-
sizeof
返回对象占有多少内存,返回的数值以字节bytes为单位
-
main 函数的参数
int main(int argc, char** argv)
argv:一个指向字符指针数组的指针
argc:argv数组中的元素个数,至少为1,因为argv的首元素是main函数编译后的程序名
示例
main 函数编译后的文件名是 say 运行 ./say Hello World 则,argc = 3, argv数组的三个指向常量字符串的元素分别为 "say", "Hello" 和 "World"
-
-
cin 标准输入流
-
cout 标准输出流
-
cerr 标准错误流,即时输出错误信息
-
clog 标准错误流,缓存错误信息,一般用于生成日志
-
-
输入输出文件
-
ifstream 是 istream 的一种; ofstream 是 ostream 的一种
-
ifstream 和 ofstream 要求提供一个字符串常量形式(准确的说是首地址指针)的文件名,而不是std::string
原因:输入输出库这样就可以不用依赖 std::string 库了
-
-
-
string转字符串常量: s.c_str();
-
字符串常量转string:直接用string的构造函数
-
-
3种内存分配方法
-
自动分配内存 – 局部变量,定义时分配,作用域结束时回收
-
静态分配内存 – static变量,系统对它进行一次且只进行一次内存分配,程序结束时释放
-
动态分配内存
(1) T* p = new T() 或者 T* p = new T(args)
T 既可以是基本类型,也可以是自定义类型,进行分配内存并初始化,将地址赋给p
(2) T* p = new T[n]
分配并初始化一个数组,数组中的每个对象会被默认初始化,返回的是数组的首地址
如果是基本类型,那么这些对象不会被初始化;如果是自定义类型,那么每个元素会运行类的缺省构造函数
-
chapter10_管理内存和低级数据结构
猜你喜欢
转载自blog.csdn.net/captxb/article/details/103063046
今日推荐
周排行