c++指针的一点东西
指针
int n = 0,i = 42;
int *p =&n, *q = &i;
*p = 42;
p = q;
指针常量和常量指针
const 在星号前面表示指的变量值不可修改(指向常量),但指针地址可变,是底层const
const 在星号后面表示指针指的地址不可修改(指针是常量),但指的变量值可变,是顶层const
int a = 20;
const int b = 10;
int* const q = &a; //q不能变 (*q)可变
*q = 25;
int* const q2 = &b; //错误 (*q)不可变,不能指向常量
const int* p = &a; //表示该变量不能用指针的形式修改 p能变指向的地址(*p)不能修改常量
int const* p2 = &a;
p = &b;
constexpr int* p3 = &a; //constexpr把 int*a置为顶层const,即指针是常量
指向常量的指针作为参数时,表示该参数在函数体中不能修改,可以起到保护作用
void StringCopy(char *dst, const char *src);
指针数组
const int *a 和 cosnt int a[] 是等价的
int a[10] 指向一个数组,数组里有10个int型指针
int (a)[10] 指向一个数组,数组里有10个整数
对*p做操作改变的 值,对p做操作改变的是地址
引用
int n = 0,i = 42;
int &r = n;
r = 42 // n = 42
r = i // n = i,引用仍然绑定在n
引用是必须初始化的,绑定对象不能变
用引用作为函数形参时,不需要拷贝对象,可以提升程序运行效率。
bool isShorter(const string &s1, const string &2){
//函数内容
}
//void func(A a){}
void func(A &a){}
//如果希望对象a在函数内部不被修改 可以用const修饰
void func(const A &a){
}
引用也可以当做类似out使用
string::size_type find_char(const string &s,char c, string::size_type &occurs){
occurs = 0
++occurs ;
}
函数调用时的传参情况
int reset(int *i) {
return *i + 1;
}
int q = 2 ;
int a = reset(&q);
// ----------------------
int reset(int &i){
return &i+1;
}
int b = reset(q);