c++指针理解

7.5 const修饰指针

const修饰指针有三种情况

  1. const修饰指针 --- 常量指针
  2. const修饰常量 --- 指针常量
  3. const即修饰指针,又修饰常量

示例:

int main() {

	int a = 10;
	int b = 10;

	//const修饰的是指针,指针指向可以改,指针指向的值不可以更改
	const int * p1 = &a; 
	p1 = &b; //正确
	//*p1 = 100;  报错
	

	//const修饰的是常量,指针指向不可以改,指针指向的值可以更改
	int * const p2 = &a;
	//p2 = &b; //错误
	*p2 = 100; //正确

    //const既修饰指针又修饰常量
	const int * const p3 = &a;
	//p3 = &b; //错误
	//*p3 = 100; //错误

	system("pause");

	return 0;
}

指针的理解:

                     int a = 10;

                     p 表示地址 即 p = &a

                     *p 表示地址指向的内容 即 *p = 10

补充:

const int * p = &a  表示常量指针

int * const p = &a  表示指针常量

const int * const p = &a 

补充:int + 空格 + * + p  == int + *+ 空格 + p ==  int + * + p  经过程序调试 他们三个格式不管是否加空格 结果相同; 

           总结:如果不想修改实参,就用值传递,如果想修改实参,就用地址传递,代码如下;

示例:

//值传递
void swap1(int a ,int b)
{
	int temp = a;
	a = b; 
	b = temp;
}
//地址传递
void swap2(int * p1, int *p2)
{
	int temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}

int main() {

	int a = 10;
	int b = 20;
	swap1(a, b); // 值传递不会改变实参

	swap2(&a, &b); //地址传递会改变实参

	cout << "a = " << a << endl;// 调用 swap1 a和b的值不变 ,调用 swap2 a和b的值变

	cout << "b = " << b << endl;// 调用 swap1 a和b的值不变 ,调用 swap2 a和b的值变

	system("pause");

	return 0;
}

你可能感兴趣的:(笔记)