什么是常量指针,指针常量?
4个回答
展开全部
首先,定义一个常量的关键字是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 *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 的方式来改变。
这个问题花了我好久才弄明白,楼主自己再琢磨琢磨,可以到机器上去实验已下,印象更深刻~祝你进步!
展开全部
①注意一下:
往往中文属于里形式如AB ,那么A是描述,B是本质。
比如 数据库管理系统 数据库管理是描述 系统是本质
比如 函数指针 函数是描述 本质是指针,这个指针指向函数地址
(那本质和描述的区别是?描述变了还是同一大类,本质变了就不是同一大类了)
②言归正传:
常量指针,也就是本质是指针,什么样的指针呢?常量类型的指针,什么叫常量类型的指针呢?
回忆一下函数指针,指向函数地址的指针。
那么常量指针,就是指向常量类型地址的指针。
比如const int * p;
而指针常量,本质是常量。
什么类型的常量?指针类型的常量,为了能够有个术语结构上的对比,你肯定知道整型常量,也知道是这么定义的:const int a;
但指针常量,是这么定义的 : int * const a;
const 在 *前面,是常量指针,const在*后面,是指针常量。
③这二者的区别就是:
const int *p 指向的是 const int a=2;的&a;p可以变化但是*p不可以变化。
而int * const p=&a; 意思是描述的是p,p不可变,就如const int a=2; a的值就不能再改变了。那么p不可以变,但是*p可以变。
还有一种是 综合一起的,const int * const p=&a; 这种一旦确定值,*p和p都不能变化。
往往中文属于里形式如AB ,那么A是描述,B是本质。
比如 数据库管理系统 数据库管理是描述 系统是本质
比如 函数指针 函数是描述 本质是指针,这个指针指向函数地址
(那本质和描述的区别是?描述变了还是同一大类,本质变了就不是同一大类了)
②言归正传:
常量指针,也就是本质是指针,什么样的指针呢?常量类型的指针,什么叫常量类型的指针呢?
回忆一下函数指针,指向函数地址的指针。
那么常量指针,就是指向常量类型地址的指针。
比如const int * p;
而指针常量,本质是常量。
什么类型的常量?指针类型的常量,为了能够有个术语结构上的对比,你肯定知道整型常量,也知道是这么定义的:const int a;
但指针常量,是这么定义的 : int * const a;
const 在 *前面,是常量指针,const在*后面,是指针常量。
③这二者的区别就是:
const int *p 指向的是 const int a=2;的&a;p可以变化但是*p不可以变化。
而int * const p=&a; 意思是描述的是p,p不可变,就如const int a=2; a的值就不能再改变了。那么p不可以变,但是*p可以变。
还有一种是 综合一起的,const int * const p=&a; 这种一旦确定值,*p和p都不能变化。
追问
你肯定知道整型常量,也知道是这么定义的:const int a;
整形常量定义 不是:int a ;就行吗?
麻烦了。
追答
int a;不是整型常量,而是整型变量。
因为它可变。
区别就在“常”与“变”。
const int a=2; 的a不可变
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int const *pri; 指向整型常量的指针,可以修改指针的值,但不能修改指向的值。
int* const pri;指向整型的常量指针,指针的值无法修改,但可以修改他所指向整型的值。
int* const pri;指向整型的常量指针,指针的值无法修改,但可以修改他所指向整型的值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
char * const c;
指针常量 是 指针类型的常量,即指针本身是常量,只能指向固定的区域;但该区域中的内容
可以改变。
const char *c; 或 char const *c;
常量指针 是 指向常量的指针,即指针指向区域的内容是常量,不能更改;但该指针可以指向
其它区域。
const char * const c
则是,指针本身是常量,它又指向常量。即指针指向固定的区域,并且该区域里面的内容也是
固定的。
指针常量 是 指针类型的常量,即指针本身是常量,只能指向固定的区域;但该区域中的内容
可以改变。
const char *c; 或 char const *c;
常量指针 是 指向常量的指针,即指针指向区域的内容是常量,不能更改;但该指针可以指向
其它区域。
const char * const c
则是,指针本身是常量,它又指向常量。即指针指向固定的区域,并且该区域里面的内容也是
固定的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询