【C++ Primer】数组和指针

来源:互联网 发布:java抽象 编辑:程序博客网 时间:2024/05/18 04:00

四、数组和指针


1. 数组

数组的长度是固定的

在数组维数必须是大于等于1的常量表达式,只能包括整型字面值常量、枚举常量、用常量表达式初始化的整型const对象。

初始化:同内置变量,函数外初始化为0,函数内无初始化。


字符数组:

char ca[] = "c++"; 最后会自动添加'\0',维数为4;

const char ca[3]= "c++"是错误的

在将某char数组char a[10] = {'a','b','c','d','a','b','c','d'}赋值后,如果令a[1] = 0或a[1] = '\0'则使用cout则只会输出a,因为cout输出遇到终止符就会停止。

数组下标的正确类型是size_t。


2. 指针

避免使用未初始化的指针

将指针初始化为0表明指针不指向任何对象,只能初始化为常量的0或const的变量0,等效于初始化为NULL


void* 指针可以保存任何类型对象的地址。


两个指针的减法操作得到的结果类型是ptrdiff_t,与size_t相似,但是是signed类型


指针和下标:

int ia[] = {1, 2, 3};

int *pb = &ia[2];

int k = pb[-2] //合法,结果是ia的第一个数


从右向左读,* 读作指向

指向const对象的指针:const double * cptr;  不必初始化,因为cptr不为常量,也可指向非常量

cost指针: int *const cur = 0; 因为其本身是一个常量,所以必须在定义时初始化

指向const对象的const指针: const int *const cur = 0;


指针和typedef:

typedef string * pstring;

string * const cstr = NULL;

const pstring cstr = NULL;

pstring  const  cstr = NULL;三者是一个意思,cstr是一个const指针



3. C风格字符串

以空字符null结束的字符数组

c风格字符串标准库函数: strlen,strcmp,strcat,strcpy,使用这些必须确定字符串以'\0'结尾,否则最后的结果是未知的。

从string转成char*: const char *str = str2.c_str(); // pay attention to the 'const'


4. 动态数组

使用new、delete来进行动态数组的申请,如果数组元素具有类类型,则使用该类的默认构造函数初始化,如果是内置类型,则不进行初始化:可以使用()进行初始化为0

int *pia = new int[10]   // not initial

int *pia = new int[10]()   // initial


5. 多维数组

int ia[3][4];   // not initial

int (*ip)[4] = ia;   // ip 是一个指向四个整数数组的指针  int *ip[4] 表示一个指向整数的指针数组

ip = &ia[2];  // ia[2] is an array of 4 ints

typedef简化多维数组的指针:

typedef int int_array[4]; int_array *ip = ia;

原创粉丝点击