常量指针和指针常量
Posted xiaozhihong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常量指针和指针常量相关的知识,希望对你有一定的参考价值。
1、常量指针(指针可改,指针指向的对象不可改)
常量指针本质是指针,用const修饰它,表示这个指针乃是一个指向常量的指针。指针指向的对象是常量,那么这个对象不能被更改。
表示方法:
const int * ptr
int const * ptr
int a = 5;
const int* c = &a; //合法
*c = 6; //非法
char *str1, *str2;
str1 = "abcde1234";
str2 = "bcde";
int strcmp(const char *str1, const char *str2); //表示在该函数里不会对形参的字符串内容进行修改
2、指针常量(指针不可改,指针指向的对象可改)
变量能修改,常量不可修改。所以指针变量能改指向,指针常量不能改指向。
(1)指针常量的本质是一个常量,而用指针修饰它,那么说明这个常量的内容应该是一个指针。另外,数组名是一个指针常量。
表示方法:
int* const ptr
(2)因为指针常量是一个常量,在声明的时候一定要给它赋初始值。一旦赋值,以后这个常量再也不能指向别的地址。
(3)指针常量的值是指针,这个值因为是常量,所以不能被赋值。
int a;
int* const p = &a; //初始化指针常量
int* q;
p = q; //非法,把上面的const去掉就合法了
(4)虽然指针常量的值不能变,可是它指向的对象是可变的,因为我们并没有限制它指向的对象是常量。
int a = 100;
int* const p = &a; //初始化指针常量
*p = 50; //合法
3、指向常量的指针常量(指针不可改,指针指向的对象也不可改)
指向常量的指针常量就是一个常量,且它指向的对象也是一个常量。
表示方法:
const int * const ptr
int const * const ptr
因为是一个指针常量,那么它指向的对象当然是一个指针对象,而它又指向常量,说明它指向的对象不能变化。
const int a = 25;
const int * const b = &a; //初始化
*b = 50; //非法
int * p;
b = p; //非法
4、一个例子
比如:
int a[10];
a++; //出错,不可修改,因为a是指针常量
以上是关于常量指针和指针常量的主要内容,如果未能解决你的问题,请参考以下文章