指针常量和常量指针的区别

指针常量是指定义的指针只能在定义的时候初始化,之后不能改变其值,格式如下:

数据类型 * const 指针常量名称

比如 : char * const p1 ;  int * const p2;

常量指针的值不能改变,但是其指向的内容却可以改变。

char a[5]="abcd";
char *const b =a;

b[0] = 'c';

这样子 字符串a就变成了“cbcd”

 

常量指针是指向常量的指针,因为常量指针指向的对象是常量,因此这个对象的值是不能够改变的。

定义格式如下:

数据类型 const * 常量指针名称

或者

const 数据类型 * 常量指针名称

如: int const *p; const int *p;

char a[5]="ba";
char b[5]="ab";
const char *c = a;
const char *d = b;


a[0] = '7';
b[0] = '8';


c = b;
d = a;//这能编译通过

//
c[0] = '6'//编译通不过,因为c是常量指针,指向的对象是常量,不能改变

 

指针常量是强调指针的不可改变性,而常量指针强调的是指针对其所指对象的不可变性。无论是指针常量还是常量指针,其最大的用途就是作为函数的形式参数,保证实参在被调用的时候不可更改。

 

两者的结合写法:

const char *const c 这种表示 c不能更改,c指向的内容也不能通过c进行更改

 

char str1[] = "abc";
char str2[] = "abc";

const char str3[] = "abc";
const char str4[] = "abc";

const char* str5 = "abc";
const char* str6 = "abc";

char* str7 = "abc";
char* str8 = "abc";


cout<<(str1==str2)<<endl;
cout<<(str3==str4)<<endl;
cout<<(str5==str6)<<endl;
cout<<(str7==str8)<<endl;

 

答案是  0011

原因是 str1 str2 str3 str4 是数组变量,它们有各自的内存空间,而数组名就是数组的首地址。由于四个数组分别定义了不同的内存空间,所以这四个数组变量地址各不相同。。。。

str5 str6 str7 str8是指针,它们指向相同的常量区域。

 

转载于:https://www.cnblogs.com/ShalenChe/p/5470966.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值