×

常量指针与指针常量的区别

常量指针与指针常量的区别(c语言中指针常量和常量指针分别是什么意思)

admin admin 发表于2023-05-30 08:55:38 浏览40 评论0

抢沙发发表评论

本文目录

c语言中指针常量和常量指针分别是什么意思


根据汉语的语法规则,这是一个偏正短语,中心在后面前面的是形容词。
所以指针常量是:
一个常量值,即确定的不会发生变化的值。指针这个形容词怎么理解呢?说明这个常量对应的是一个指针的值。举个例子就像你的出生地址,这可以理解为一个指针常量。
常量指针呢?说明这个数据类型是一个指针,这个指针存储的是什么呢?是一个常量的地址。

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


常量指针,定义语法是 数据类型 const * 变量名;
如,int const * p1;
定义后可以改变该指针的指向却改变不了值。
指针常量,定义语法是数据类型 * const 变量名;
如,int * const p2;
和常量指针相反,可以改变值但是不可改变指向地址。

C++ 引用和指针的区别 常量指针和指针常量


常量指针,就算指针的地址不变。但是指针里面的内容是可以变的。
类比:我那条红色、尼龙的绳子,可以拴马,也可以捆柴。我的绳就算我的绳子,谁都不准用我的绳子【绳子是常量,归我所有,不可改变,但是绳子想拴什么就拴什么】。
指针常量:指向不可变常量的指针,
类比:拴我的马的绳子,谁的绳子都可以来拴我的马,但是马是我的【马是常量归我所有,马不可变】。

什么是常量指针,指针常量


首先,定义一个常量的关键字是const ,其实这里面有一个被大家都默认为正确的错误,那就是用const定义的常量,其本质还是一个变量,因为内存会分配地址给保存起来,如果用define定义的常量才是真正的常量,这个内存是不会分配空间的,那怎么区别呢,因此内行人都将用const定义的成为只读变量,只读的意思就是只能读取他的值,而不能重新给他赋值。记住了哦~
这个问题说难也难,说简单也简单,看下边答案的时候要记住,指针是一个变量,他有自己的内存空间,保存的是他指向变量的地址,记住,指针的值是地址,这样理解。
1.常量指针 指的是指针的值是不能被改变的,就是指针的值是常量,假设
int *const p;关键点来了: const 修饰的是p,p是一个指针,我们知道指针也是一个变量,内存也会分配空间给他,他里面存的是地址,这样我们根据const关键字的属性就知道了: 指针变量p里面的值是不能改变的,指针变量里面是什么呢? 对,是地址。正是由于他是不能改变的,所以我们一定要在定义的时候初始化,比如
int i=20;
int *const p= &i
以下操作:
p =&i2 不行,因为p的值是不能改变,就是他不能指向别的地址。
*p =100; 正确,因为他改变的不是p的值,而是相当于改变他指向的变量的值。
2.指针常量
形式 int const *p ;注意,const 关键字,int的位置可以互换,不影响,注意*号与const的位置
关键点: const 修饰的是 *p (这个是重点);我们知道p里面是一个地址,那么*p就是他所指向的地址里面的数据,是一个值,不是一个地址了。那是什么意思了,const的意思你还记得吗?就是定义一个只读的变量,就不不能改变他值的变量,那么这条语句的意思就是:*p的值是不能改变的:
假设下面语句
int i1 = 30;
int i2 = 40;
const int *pi = &i1
pi = &i2 /* 注意这里,pi可以在任意时候重新赋值一个新内存地
址*/
i2 = 80; /* 想想看:这里能用*pi = 80 来代替吗?当然不能!*/
printf(“%d\n“, *pi); /* 输出是 80 */
语义分析:
看出来了没有啊,pi 的值是可以被修改的。即它可以重新指向另一个地址
的,但是,不能通过*pi 来修改 i2 的值(这句话是关键)。不能通过*p的方式来改变并不是说i1,i2不能改变,就是他指向的变量的值是可以改变的,但是不能通过*p = 40 的方式来改变。
这个问题花了我好久才弄明白,楼主自己再琢磨琢磨,可以到机器上去实验已下,印象更深刻~祝你进步!

常指针与指针常量的区别


1 常量指针!如 int b, c; int * const a = &b
表示a是一个常量指针它指向变量b的内存。但是因为是常量指针所以不能再用a指向其他变量,如 a = &c 错误!可以修改指向内存的值,如:*a = 20; BTW 常量指针声明的时候必须向我那样赋初值。
2 指向常量的指针!如 int b, c; int const *a; a = &b a = &c
都可以,唯独它指向的内存不能被修改。如:*a=20;这是违法的!错误!
这就是主要区别!
BTW 还有一个记住他们不同形式的技巧!看const关键字,他后面的不可修改,如int * const a = &b 后面是a,则说明a不能修改!
int const * a = &b后面是*a则说明*a不可被修改!
在好多书上或MSDN是经常用 const int a=5;
int b=6;
const int *p=&b
其实 const int* 和int const* 一样,就是常指针 也就是它所指向的数据(在这是int)是常量,它自己的数据类型是const int*
还有const int *p=&b是可以的 虽然b不是常量。
但是 const int a=6;
int *p=&a
会报错,因为它消除了a的const属性
**********************************************
*******我们可以总结一下********
1. 对于常量(符号常量)和常指针、常引用常对象声明都是一样的
定义格式: const 数据类型 常量名=常量值;
或 数据类型 const 常量名=常量值;
例如:const int a=7; 或 int const a=7;(符号常量)
int b=5;
const int *p=&b 或 int const *p=&b(常指针)
const int &m=b;(常引用)
const Point pt; 或 Point const pt; //常对象不能更新
常指针和常引用在功能上有所限制,就是不能通过他们更改其指向的变量的数据(值)
2. 指针常量
定义格式: 数据类型 *const 指针常量=常量值;
如char ch,*const pch=&ch(我是一步完成的,你也可以分开)
也就是说这个指针本身是个常量,不可改变,即它所指向的地址是固定的。但,ch是可以改变的。
************************************
下面是MSDN中关也常对象的说法
///////////////////////////////////
Initializing Pointers to const Objects
A pointer to a const object can be initialized with a pointer to an object that is not const, but not vice versa. For example, the following initialization is legal:
Window StandardWindow;
const Window* pStandardWindow( &StandardWindow );
In the preceding code, the pointer pStandardWindow is declared as a pointer to a const object. Although StandardWindow is not declared as const, the declaration is acceptable because it does not allow an object not declared as const access to a const object. The reverse of this is as follows:
const Window StandardWindow;
Window* pStandardWindow( &StandardWindow );
The preceding code explicitly declares StandardWindow as a const object. Initializing the nonconstant pointer pStandardWindow with the address of StandardWindow generates an error because it allows access to the const object through the pointer. That is, it allows removal of the const attribute from the object.
///////////////////////////////////////
有问题我们再到HiKe电脑吧讨论!
来源:http://hike.bokee.com/6169539.html

C++中,常量指针和指针常量的区别如何记忆


常量指针 是指向常量的指针。
表示指针本身值可以改,但指向值不可以改。即p的值可以变,但是*p不能变
形式是
const TYPE *p; 或者 TYPE const *p;
指针常量 是说指针本身是常量。 也就是p不可以改,但是*p是可以改的。
形式是
TYPE * const p;
复合起来 就是常量指针常量。。。 绕口吧,就是这样
定义
const TYPE * const p;
p和*p都不能改。

c++常量指针,和指针常量和常量指针常量这些都有啥区别的哈!


const是用来修饰类型的,一般从位置来判断它所限制的对象。如:
const
char
*
v;//这是常量指针,const与char最近,它限制char是常量,即不可被修改,整体看const
char即是不可被修改的char类型,再看*
v,v是指针变量,这个指针变量指向的类型是const
char。
char
*
const
v;//这是指针常量,const与*最近,它限制指针变量是常量,即指针的值不可被修改(即指针指向的内存地址不可修改),这个内存单元被解释为char类型。

指针常量和常量指针的区别如何记忆


看const在哪里:
数据类型 * 指针变量名;
这个声明格式 指针变量名前面有3个空白可以加入const
前面两个都是修饰的指针,都是指向常量的指针,比如int const *p; 或者const int *p;自己可以变,但是不能通过这个指针来改变指针指向的目标
最后一个,const 距离变量名最近,因此指针是常量,自己不能改变了,但是可以通过这个指针改变指针指向的目标