指针要注意类型的对应,不要出现类似 int * 转向 int 的操作。
int **p = 0; //指向指针的指针,不让它指向任何地方
int *p1 = *p;
int array[10];
int *p1 = array; //数组名指定数组首地址
int *p1 = &array[0]; //指向第一个元素对应的地址
字符串的常见操作:
遍历串
int string_length(const char *st)
{
int cnt = 0;
if(st) //判断st是否指向某对象
while(*st++) //先执行st++, 再取其值,即判断串的每一个字符是否为0(末尾为0)
++cnt;
retrun cnt;
}
引用串
const char *st = "aaaaaaaaaaaa";
const char *p = st; //此处加一个指针,对p进行操作,保留st的首指针
while(*p++)
...
const
int i = 8;
const int * a = &i; //指向常整型的指针,指针指向地址可变,但值不可变。(ok: a = &i2; error: *a = 9;)
int * const a = &i; //指向int *型的常指针,指针指向地址不可变,但值可变。(ok: *a = 9; error:a = &i2; )
const int * const a = &i //地址、值都不可变
例如:
const int ic; //错误,没有初始化
const int *ic; //正确,为一个指针(只是指向类型为const int),不用初始化
int * const ic; //错误,没有初始化,为一个常量(类型为int *),所以要初始化
int i = 8;
const int ic = i; //ok
const int *pic = &i; //ok (const int 可以指向int, 也可以指向const int)
const int *pic = ⁣ //ok
int * const pic = &i; //ok(int *只能指向int *, 不能指向const int *)
int * const pic = ⁣ //error
const int * const pic2 = ⁣ //ok
引用
int *pi = NULL;
int *&rval = pi; //指向指针的引用
常引用
* 可以指向不可寻址的值,如常量。
* 指向不同的类型(只要从一种类型可以转到另一种类型)
double dval = 2.88;
const int &ir = 1024;
const int &ir2 = dval; //编译器先将dval转化成int, 再将引用指向它
const int &ir3 = dval+1.0;
const int ival = 1024;
const int *const &pi_ref = &ival (?写法还是不太明白)
布尔
布尔值不可以被声明为signed, unsigned, short, long
例如下面的写法是错误的:
short bool found = false;