码迷,mamicode.com
首页 > 编程语言 > 详细

Java程序员学习C++之常量指针和指针常量

时间:2015-06-15 16:31:24      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:指针   常量   const   

常量和指针

声明后还能被修改的叫变量,如果为了保护变量不能被修改就声明为常量,使用const修饰符。

在C++中系统会为指针变量分配一个4字节(32位)的内存块用来存储指向数据的地址,所以指针类型就牵扯到两个概念,指针本身(4字节的内存块)和指向数据(4字节的内存块存储的地址)。

如果指针和常量结合会有什么问题呢?

声明指针是常量是保护指针本身不能改变 呢,还是保护指向数据不能改变呢,还是两者都会保护呢?



指针常量

定义:指针本身是常量

声明:int * const p = &a;//(const 修饰的是p)

特性:指针指向不能变,但是指向对象可变(保护指针本身不保护指向数据)

#include <iostream>
using namespace std;

int main()
{
	int a = 1, b = 2;
	int * const p = &a;
	*p = 3;//可以编译,可以改变指向数据
	p = &b;//无法编译,不能重新指向新对象(指针本身不能变)
	return 0;
}


常量指针

定义:指向常量的指针

声明:const int *p = &a;或者int const *p = &a; //(const 修饰的是*p)

特性:指针指向可变,但是指向对象不可变(保护指向数据不保护指针本身)

#include <iostream>
using namespace std;

int main()
{
	int a = 1, b = 2;
	const int *p = &a;
	*p = 3;//无法编译,不能改变指向数据
	p = &b;//可以编译,可以重新指向新对象(指针本身可以变)
	b = 3;//但是通过原变量仍然可以改变p指向的数据
	return 0;
}

指向常量的指针变量

定义:指针本身是常量,指向对象也不能变

声明:const int * const p = &a; //(const 修饰的是*p和p)

特性:保护指向数据也保护指针本身

#include <iostream>
using namespace std;

int main()
{
	int a = 1, b = 2;
	const int * const p = &a;	//两者都保护
	*p = 3;//无法编译,不能改变指向数据
	p = &b;//无法编译,不能重新指向新对象(指针本身不能变)
	return 0;
}


常量之间的赋值

#include <iostream>
using namespace std;

int main()
{
	int const a = 1;

	int const *p1 = &a;//正确,a是常量不可变,赋给指针p1后a同样不可变
	int * const p2 = &a;//不正确,a是常量不可变,赋给指针p2后a无法保证不可变
	int const * const p3 = &a;//正确,a是常量不可变,赋给指针p3后a同样不可变
	return 0;
}







Java程序员学习C++之常量指针和指针常量

标签:指针   常量   const   

原文地址:http://blog.csdn.net/easion_zms/article/details/46474175

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!