根据代码来演示一下常指针与指向常量的指针的区别:
#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;
}
看了这些,你是否对此有了一定的了解了呢?