常量指针和指针常量有什么区别

如题所述

区别:

1、本质

指针常量:本质上一个常量,指针用来说明常量的类型,表示该常量是一个指针类型的常量。

常量指针:本质上是一个指针,常量表示指针指向的内容,说明该指针指向一个“常量”。

2、地址

指针常量:在指针常量中,指针自身的值是一个常量,不可改变,始终指向同一个地址。在定义的同时必须初始化。

常量指针:指针可以指向其他地址

3、内容

指针常量:指向的内容可以修改

常量指针:在常量指针中,指针指向的内容是不可改变的,指针看起来好像指向了一个常量。

扩展资料

指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区。

从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。

当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。

从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。

指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。在32 位程序里,所有类型的指针的值都是一个32 位整数,因为32 位程序里内存地址全都是32 位长。指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为si zeof(指针所指向的类型)的一片内存区。

在32 位平台里,指针本身占据了4 个字节的长度。指针本身占据的内存这个概念在判断一个指针表达式(后面会解释)是否是左值时很有用。

参考资料:百度百科 - 指针

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-03-04
int a;
int * const p = &a //指针常量,*p可以修改*p = 8;(OK)
p不可以修改 p++(ERROR)

int a,b;
const int *p = &a;//常量指针 *p不可修改 *p = 8;(ERROR)
p 可以修改 p = &b (OK)

还有一种
const int * const p = &a; // *p 和 p均不可改变了追问

非常感谢!

追答

关键要看const修饰的是谁
int const const int的写法是一样的

指针的话看const离谁( 是‘*’ 还是‘指针变量名’)比较近就是修饰谁的,比如
const * 表示带*运算对象的是常量,也就是*p 不可变 (暗示p可变,p不带‘*’ 嘛)
* const 变量名 表示变量名是常量 也就是p不可变 (暗示*p可变,const没有修饰‘*“ 嘛)

本回答被网友采纳
第2个回答  2011-12-31
常量指针是指--指向常量的指针,顾名思义,就是指针指向的是常量,即,它不能指向变量,它指向的内容不能被改变,不能通过指针来修改它指向的内容,但是指针自身不是常量,它自身的值可以改变,从而可以指向另一个常量。
指针常量是指--指针本身是常量。它指向的地址是不可改变的,但地址里的内容可以通过指针改变。它指向的地址将伴其一生,直到生命周期结束。有一点需要注意的是,指针常量在定义时必须同时赋初值。

2.使用方法
写法上的区别:
常量指针:const 在*之前 指针常量:const在*之后。
使用举例:
(1) 常量指针使用:
如 int b, c;
int const *a;
a = &b;
a = &c;
都可以,唯独它指向的内容不能被修改。如:*a=20;这是违法的!错误!
(2) 指针常量使用
如 int a ,b;
int * const p = &a;
表示p是一个常量指针它指向变量a的内存。指针常量不能再用p指向其他变量,如 p = &b; 错误!可以修改指向内存的值,如:* p = 20; 指针常量声明的时候必须像上式那样赋初值。
指针常量也不能释放,用p指向NULL,即
p = NULL;
会在编译时报错
/opt/test/test.c:649: error: assignment of read-only variable `p'
还有一个记住他们不同形式的技巧!看const关键字,他后面的不可修改,如int * const a = &b; 后面是a,则说明a不能修改!
int const * a = &b;后面是*a则说明*a不可被修改!
第3个回答  2020-11-25
```
===========不管中文翻译怎么理解,你只要能搞清楚定义就好了。
Pointer to constant:【常量指针】:指向一个常量;(const修饰的是*ptr,是指向的值)
const int *ptr;
int const *ptr;

Constant pointer to variable:【常指针】:指针固定地址,值随便改;(const修饰的是ptr,是指针)
int *const ptr;

constant pointer to constant:【常量常指针】:固定地址固定值;
const int *const ptr;

===========如下答案我改了下
int a,b;
//----eg1:const *p,*p即值不可以修改,p即地址可以修改。【常量指针】
const int *p = &a;
*p = 8; //ERROR
p = &b; //OK

//----eg2:* const p,*p即值可以修改,p即地址不可以修改。【常指针】
int * const p = &a;
*p = 8; //OK
p = &b; //ERROR

//----eg2:还有一种,*p 和p即值和地址均不可改变了。【常量常指针】
const int * const p = &a;
*p = 8; //ERROR
p = &b; //ERROR

====说说中文翻译:常量指针、常指针、指针常量
我觉得先说说中文语法:比如说黄色橘子,它本身是个橘子,只是是黄色类型的橘子,所以说修饰词在前,本质词在后,先搞清楚这个。

然后再看:
----指针常量:那就是描述一个常量,只是是指针类型的,也就是地址类型的,所以这个地址既然是常量那地址就不可变,但是地址里面的内容可变,那就应该定义为* const p,const修饰p这个地址,表明地址是不可变的。
(但是问题来了,这为什么是个常量,不还是个指针吗?所以到底怎么理解“指针常量”?按照前面的解释就是一个不变的指针,所以我更偏向于叫它“常指针”)

----常指针:如上所说,也就是说这是个恒定的指针,是个不变的地址。

----常量指针:那本质就是指针,也就是指向常量类型的指针,所以这个指针本身是可变的,但是指向的值不能变,所以定义为const *p,const修饰*p,即p这个指针指向的值,表明值是不可变的。
(这里不能理解为常量类型的指针,因为按照我们的习惯,比如“整型指针”说的是这个指针指向一个整型的值。如果你理解为常量类型的指针,那就是说这个指针是常量,又绕进去了)
```
第4个回答  2018-03-03
兄弟你刚好写反了,应该是:
int const *p或者const int *p:指向常量的指针(*p称为指针常量,不过一般没有这种说法),不能通过该指针来改变对象的值;指针自身是变量,故其指向可变
int *const p:常量指针,必须初始化,且指针本身是常量,其指向不可变;但所指向的值不一定是常量

常量指针和指针常量有什么区别
区别:1、本质 指针常量:本质上一个常量,指针用来说明常量的类型,表示该常量是一个指针类型的常量。常量指针:本质上是一个指针,常量表示指针指向的内容,说明该指针指向一个“常量”。2、地址 指针常量:在指针常量中,指针自身的值是一个常量,不可改变,始终指向同一个地址。在定义的同时必须初始...

常量指针和指针常量的区别
常量指针和指针常量主要的区别在于其定义和用途。常量指针(const pointer)是指向常量的指针。这个指针不能通过其来修改它所指向常量的值,即常量的值不可变,不可以通过该指针修改其值。但是该指针可以指向其他的常量。它的声明方式是:数据类型 const * 变量名。指针常量(pointer constant)是指针本身是...

常量指针与指针常量的区别
常量指针与指针常量的主要区别在于它们的修饰对象和所表达的含义。首先,常量指针是指向常量的指针,其修饰的是指针所指向的数据,而不是指针本身。这意味着通过该指针,我们不能修改所指向的数据的值,但可以改变指针的指向。例如,const int *p,这里的p是一个指向const int的指针,我们不能通过p来修改...

谁能说清指针常量和常量指针的区别
常量是形容词,指针是名词,以指针为中心的一个偏正结构短语。这样看,常量指针本质是指针,常量修饰它,表示这个指针乃是一个指向常量的指针(变量)。指针指向的对象是常量,那么这个对象不能被更改。在C\/C++中,常量指针是这样声明的:1)const int *p;2)int const *p;常量指针的使用要注意,指针...

指针常量和常量指针的区
指针常量和常量指针在C++中具有不同的性质。主要的区别在于,常量指针一旦初始化,指向的内存地址是固定的,不能更改指向,例如`int * const a = &b`,即使想改变`a`指向其他变量如`a = &c`也是不允许的,但可以修改其指向内存的值,如`*a = 20`。而指向常量的指针,如`int const *a`,...

【C\/C++】深入理解C++中常量指针、指针常量、引用的区别
常量指针的特点是,它指向的变量保持不变,但指针自身的地址可调整。在C++中,常量指针常用于传递只读属性参数,确保参数在函数调用过程中的安全性。相比之下,指针常量的指针地址固定不可变,但其指向的变量值可以改变。指针常量提供了一种更安全的引用方式,简化了编程逻辑,避免了对NULL的判断。引用的...

C\/C++杂谈(1)指针常量、常量指针
指针常量意味着指针本身是一个常量,其内部的内存地址(钥匙)不能被改变。而常量指针是指针指向的内存地址所对应的值(保险箱里的东西)不能被修改,即使指针可以改变指向的位置(新的钥匙)。在代码中,区分它们的简单方法是检查const关键字的位置。如果const紧跟在*(指针)后面,那么是常量指针;反之,...

指针常量和常量指针的区别
常指针和常引用在功能上有所限制,就是不能通过他们更改其指向的变量的数据(值)2. 指针常量 定义格式: 数据类型 *const 指针常量=常量值;如char ch,*const pch=&ch;(我是一步完成的,你也可以分开)也就是说这个指针本身是个常量,不可改变,即它所指向的地址是固定的。但,ch是可以改变的...

什么是常量指针,指针常量?
2.指针常量 形式 int const *p ;注意,const 关键字,int的位置可以互换,不影响,注意*号与const的位置 关键点: const 修饰的是 *p (这个是重点);我们知道p里面是一个地址,那么*p就是他所指向的地址里面的数据,是一个值,不是一个地址了。那是什么意思了,const的意思你还记得吗?就是定义...

C++中常函数的返回值是数组指针就要定义为常指针 返回值是变量指针就...
常量指针就是指向常量的指针,指针所指向的地址的内容是不可修改的。而指针常量就是是指针的常量,它是不可改变地址的指针,但是可以对它所指向的内容进行修改。根据你的需要,如果函数返回的那个数组指针指向的内容是不允许修改的话,那么其返回值就定义为常量,用const进行修饰,同时用来接收该函数返回值...

相似回答