C语言 怎样区分指针常量和指针变量?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 怎样区分指针常量和指针变量?相关的知识,希望对你有一定的参考价值。
如有:
char s1[100]="ABC";
char *s2="DEF";
这样以后,s1就是指针变量,s2就是指针常量吗?为什么?
不是说所有的数组名都是指针常量吗?那s1不就是个字符数组名吗,怎么会是变量呢?
还有,定义char * s2以后,我觉得s2应该是指针变量啊,怎么会说他是指针常量呢?
到底应该怎么区分指针常量和指针变量啊,有谁能具体解释一下吗?
char s1[100]="ABC";
数组的内容是可变的,所以是变量,但数组名指向的地址是不可变的,所以是常量
char *s2="DEF";
字符串"DEF"是常量,因为不可变,而s2的值是可变的,是变量 参考技术A
指针常量的本质是一个常量,并且使用指针来修饰它,那么说明这个常量的值应该是一个指针,其格式应为:int * const p,
常量指针本质是指针,并且这个指针乃是一个指向常量的指针。其格式为:int const * p或者 const int* p.
指针常量的值是指针,这个值因为是常量,所以不能被赋值。
在C/C++中,指针常量这样声明:
int a;
int *const p = &a; //const放在指针声明操作符的右侧
只要const位于指针声明操作符右侧,就表明声明的对象是一个常量,且它的内容是一个指针,也就是一个地址,并且在声明的时候一定要给它赋初始值。一旦赋值,以后这个常量再也不能指向别的地址。
常量指针的使用要注意,指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改,也就是说常量指针可以被赋值为变量的地址,之所以叫做常量指针,是限制了通过这个指针修改变量的值。
所以,指针常量和指针变量的区别就是是否使用了const修饰符修饰,凡是有const修饰的指针都是指针常量,否则就是指针变量。
指向常量的指针变量的定义和使用
如:const int *p;
2、指针常量
如:char* const p = "abcde";
可以这么理解:const p的类型式char*,所以p是不可以再修改的。也就是所p必须是在定义时就已经初始化,并且不能再修改了。
3、指向常量的指针常量
指向常量的指针常量
如:const int* const p = &b;
可以这么理解int* const p的类型时const,那么也就是所int* const p是不可以修改的。
再看int* const p.const p的类型是int*,也就是p是不可以再修改的,并且它的类型是int*.
C 语言const 关键字用法 ( 常量指针 - const 在 * 左边 - 修饰数据类型 - 内存不变 | 指针常量 - const 在 * 右边 - 修饰变量 - 指针不变 )
文章目录
一、const 普通用法
const 关键字 在 C 和 C++ 中的表现不同 , 本篇博客主要介绍 C 语言中的 const 用法 ;
const 的用法 : 下面的 2 2 2 个写法作用相同 , const 可以在 数据类型 前面 , 也可以在 数据类型 后面 ;
// 下面两个 const 用法相同
const int a;
int const a;
二、常量指针 ( 指向 常量 的指针 | 被指向的内存不能被修改 )
下面的 c 是 指向 常量字符 的指针 , const char
表示 常量字符 , const char *
表示 指向 常量字符 的指针 ;
- 该指针 指向的 内存空间 不能被修改 ,
- 指针可以被修改 ;
// 指向 常量字符 的指针
const char *c;
上述代码 指针指向的 内存 是常量 ; 常量指针
三、指针常量 ( 指针不能被修改 )
下面的 d 是 指向 字符 的 常量指针 , char *
表示一个指向 char
字符的指针 , 后面加上 const
表示该指针 是 常量指针 ;
- 该指针 指向的 内存空间 可以被修改 ,
- 指针 不能 被修改 ;
char * const d;
上述代码 指针 是常量 ; 指针常量
三、指向 常量 的 指针常量
下面的 c
是 常量指针 指向一个常量 , 指针 和 指针指向的内存 , 都不能被修改 ;
const char * const c;
四、const 在 * 左右的意义
普通的数据类型 , const 在数据类型左右作用相同 ;
指针数据类型 , const 在 * 左侧是 常量指针 ( 内存不能修改 ) , const 在 * 右侧是 指针常量 ( 指针不能被修改 ) ;
指针常量与常量指针 : 需要查看 const 修饰的是 指针变量 , 还是 修饰 指针变量 指向的内存空间 ;
- const 在
*
右边 ( 指针常量 | const 修饰的是变量 ) : const 修饰的是 指针变量 , 如char * const d
, const 修饰的是char *
, 指针不能被修改 ; 这是 指针常量 ; - const 在
*
左边 ( 常量指针 | const 修饰的是数据类型 ) : const 修饰的是 指针变量 指向的内存空间 , 如const char *c
, const 修饰的是char
,char
数据不能被修改 , 这是 常量指针 , 指向常量的指针 ;
const 修饰的是右边的内容 ,
- 右边是 变量 , 相当于 const 在 * 右边 , 指针常量 , 指针不能修改 ;
- 右边是 数据类型 , 相当于 const 修饰的是 内存中的数据 , 指针指向的内存不能被修改 ;
以上是关于C语言 怎样区分指针常量和指针变量?的主要内容,如果未能解决你的问题,请参考以下文章
C 语言const 关键字用法 ( 常量指针 - const 在 * 左边 - 修饰数据类型 - 内存不变 | 指针常量 - const 在 * 右边 - 修饰变量 - 指针不变 )