放牧代码和思想
专注自然语言处理、机器学习算法
    This thing called love. Know I would've. Thrown it all away. Wouldn't hesitate.

const int*和int* const

在看《C++ Primer 第五版》的时候,发现了这么一个自己没注意到的地方:

const int*和int* const中的const修饰的对象不同,const int*修饰值,不能改变指针所指的值;int* const修饰指针,不能改变指针的地址。举个例子:

#include <iostream>
using namespace std;

///////////////////////////SubMain//////////////////////////////////
int main(int argc, char *argv[])
{
	int n = 0;
	int* p1 = &n;
	const int* p2 = &n;		// 底层const,可以改变指针地址,不能改变指针指向的值
	int* const p3 = &n;		// 顶层const,可以改变指针指向的值,不能改变指针地址

	(*p1)++;
	cout << n << endl;
	// error C3892: “p2”: 不能给常量赋值
// 	(*p2)++;
// 	cout << n << endl;
	(*p3)++;
	cout << n << endl;

	p1 = nullptr;
	p2 = nullptr;
	// error C3892: “p3”: 不能给常量赋值
// p3 = nullptr;

	system("pause");
	return EXIT_SUCCESS;
}
///////////////////////////End Sub//////////////////////////////////
/************************************************************************/
/* 
1
2
请按任意键继续. . .
*/
/************************************************************************/

知识共享许可协议 知识共享署名-非商业性使用-相同方式共享码农场 » const int*和int* const

评论 欢迎留言

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

我的作品

HanLP自然语言处理包《自然语言处理入门》