第四章 数组与指针
指针和引用的比较:使用引用和指针都可间接的访问另一个值,但它们之间有两个重要的区别,第一引用总是指向某一个对象:定义引用时没有初始化是错误的。第二、赋值行为的差异:给引用赋值是修改的是该引用所关联的对象的值,而不是使引用与另外一个对象关联。引用一经初始化,就始终指向同一个特定的对象。举例:
int ival = 1024, ival2 = 2048;
int *pi = &ival, *pi2 = &ival2;
pi = pi2;
赋值结束后,pi指向的ival对象的值保持不变,赋值结束操作修改了pi指针的值,使其指向另外一个不同的对象。
int &ri = ival, &ri2 = ival2;
ri = ri2
这个赋值操作改变了ri引用的值,而非引用本身。
C风格字符串:
所有C风格字符串必须以字符串结束符null作为结束,举例
char str[] = {'a','b','c','d'}; //没有以null作为结束
cout<<strlen(str)<<endl; //所得结果为不可预料的值
C风格字符串与C++的标准库类型string的比较
//C-Style Character string implementation
const char *pc = "a very long literal string";
const size_t len = strlen(pc);
//performance test an string allocation and copy
for (size_t ix = 0; ix != 1000000; ++ix)
{
char *pc2 = new char[len+1]; //allocation the space
strcpy(pc2, pc);
if (strcmp(pc2, pc))
{
; //do nothing
}
delete [] pc2; //free the memory
}
//C++ STRING
string str("a very long literal string");
for (size_t ix = 0; ix != 1000000; ++ix)
{
string str2 = str; //do the copy
if (str != str2)
{
; //do nothing
}
} //str2 is automatically freed