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);
posted @ 2022-01-01 21:00  melt00  阅读(31)  评论(0编辑  收藏  举报