1 数组
数组的维度必须为大于0的常量表达式
int a[3] = {0,1,2}; 函数体内的数组,无初始化操作. 函数体外的会初始化默认值.
char b[] = "abc"; 会在后面添加一个空字符. 长度为4.
不允许直接复制和赋值. 长度是固定的.
2 数组操作
下标类型为size_t 保护好避免越界 buffer overflow
3 指针
指针用于指向对象 保存的是另一个对象的地址
double *p; 理解指针时,从右向左阅读.
避免使用未初始化的指针
void* 指针 只是为了保存地址.
给指针赋值: p = &A;
通过指针赋值: *p = "test";
4 指针引用区别
引用必须定义时初始化 而且一直指向该对象.
指向指针的指针 int **p1 = &p2;
指针访问数组, int a[] = {1,2,3,4}; int *p = a; 指向数组的第一个元素.
在指针上加上(或减去)一个整型数值 n 等效于获得一个新指针,指向指针原来指向的元素之后(或之前)的第 n 个元素。
两个指针减法操作的结果是标准库类型(library type)ptrdiff_t的数据
int last = *(ia + 4); 获得ia指针数组的[4]元素. 不可写为 *ia + 4 会取出ia的数值再加4.
指向 const 的指针常用作函数的形参
5 C 风格字符串
带结尾的字符串数组 const char 类型的数组
cstring 是 string.h 头文件的 C++ 版本,而 string.h 则是 C 语言提供的标准库。
#include <cstring>
strlen(s) 返回 s 的长度,不包括字符串结束符 null
strcmp(s1, s2) 比较两个字符串 s1 和 s2 是否相同。若 s1 与 s2 相等,返回 0;若 s1 大于 s2,返回正数;若 s1 小于 s2,则返回负数
strcat(s1, s2) 将字符串 s2 连接到 s1 后,并返回 s1
strcpy(s1, s2) 将 s2 复制给 s1,并返回 s1
strncat(s1, s2,n) 将 s2 的前 n 个字符连接到 s1 后面,并返回 s1
strncpy(s1, s2, n) 将 s2 的前 n 个字符复制给 s1,并返回 s1
永远不要忘记字符串结束符null
const char *str = st2.c_str(); // st2的内容可能会改变,所以请注意这样的BUG
6 自由存储区或堆
每一个程序在执行时都占用一块可用的内存空间,用于存放动态分配的对象,此内存空间称为程序的自由存储区或堆。C 语言程序使用一对标准库函数
malloc 和 free 在自由存储区中分配存储空间,而 C++ 语言则使用 new和 delete表达式实现相同的功能。
int *pia = new int[10]; 此 new 表达式分配了一个含有 10 个 int 型元素的数组,并返回指向该数组第一个元素的指针,此返回值初始化了指针 pia。
C-style strings(C 风格字符串) compiler extension(编译器扩展)compound type(复合类型) delete expression(delete 表达式 dynamically allocated(动态分配的)
free store(自由存储区)== heap(堆)precedence(优先级)