常指针与指向常量的指针

根据代码来演示一下常指针与指向常量的指针的区别:
#include "stdafx.h"

int main(int argc, char* argv[])
{
	//const变量定义的方式
	//第一种定义方式  const在类型的前面
	const int var = 100;
	//第二种定义的方式 const在类型的后面
	int const var2 = 999;
	//以上两种定义的方式没有区别
	//const变量在定义的时候进行初始化
	//当一个变量被声明为const变量,意味着该变量
	//是一个常量,不可被修改。
	//换句话说该变量只可做右值不可做左值。

	//const指针,也叫做常指针
	//1.在声明的时候进行初始化;
	//2.指针不能再指向别的变量,指针的value不可更改
    //3.可以通过指针来修改变量的值

	int z = 89;
	int * const pp = NULL;

	int * const cp = &z;
	*cp = 188;
	printf("z=%d\n",z);
	//const指针指向的是const变量

//	const int aa = 111;
//	int* const pa = &aa;
//   *pa = 999;
//	printf("aa = %d\n",aa);

	//const指针指向非const变量
	int bb = 888;
	int * const pb = &bb;
	*pb = 444;
	printf("bb = %d\n",bb);

	//**********************************

	//1.指向常量的指针,防止通过指针去修改变量的值。
	//而不管该变量是否为const
	int x = 123;
	const int *pc = &x;
   // *pc = 878;
    printf("x=%d\n",x);

	//2.指向常量的指针,该指针可以指向别的变量,
	//指针的value可以改变
    pc = &bb;
	//3.指向常量的指针,不能赋值给一个普通的指针
	//int * temPointer = pc;
    const int * temPointer = pc;
	printf("Hello World!\n");
	return 0;
}


根据上面所写的内容来判断下列代码中的表达式是否正确。

#include <stdio.h>

int main(int argc, char *argv[])
{
	//定义基本类型的const变量,const位置在哪都可以 
	const int x=2,y=3; 
	int z=3;//定义一个非const变量 
	const int * pc = &x;//指向常量的指针
	int * const cp = &z;//常指针
	int *pp = &z;//一个非const指针 
	
    //const变量只能做右值,不能做左值 
	// x=y;//错,x是const变量,所以x的值不可改变 ,跟y没有关系 
	 
	 pc = &z;//对,pc是指向常量的指针,该指针可以指向别的变量,指针的value可以改变
    
	//*pc = 10;//错,指向常量的指针,不能通过指针去修改指针所指向的内存空间的值 
	 //*pc = y;//错,同上
	// *pc = 5;//错,同上
	
	 pc = pp;//对,pc是一个指向常量的指针,pp是一个普通指针,
	         //用一个普通指针给一个指向常量的指针赋值是可以的 
     
	 //pp = pc;//用一个指向常量的指针,赋值给一个普通指针,不可以。
	         //如果可以,那么就可以通过普通的指针去修改内存的值 
	 
	 z = 5;//对,一个普通变量可以给他重新赋值
	 
	 z = x;//对,可以把不可改变的常量的值赋值给普通变量
	 
	 *cp = x;//对,通过常指针去修改指针所指向变量的值,原则上来讲是可以的
	         //如果指向的变量时const,那么不同的编译器会有不同的结果 
    
	//cp = &x; //错,cp是常指针,指针不能再指向别的变量,指针的value不可更改
	           //给常指针赋值是错误的 
    
	 pp = &x; //pp是非const指针,给它赋值是可以的 
	
	 //pp = pc;//错,指向常量的指针 ,不能赋值给一个普通的指针
     pp = cp; //对 常指针可以赋值给一个普通指针。 
	 
	printf("Hello C-Free!\n");
	return 0;
}

看了这些,你是否对此有了一定的了解了呢? 微笑




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值