常量指针

时间:2024-03-29 11:00:33编辑:奇事君

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

前者是变量,后者是常量,指针变量很显然这个指针指向的存储单元存储的数据是可以变化的和指针常量指向的数据是程序运行前定义的一个不会变化的量,在程序运行过程中,这个量既不能改变大小,也不能改变类型。存放地址的变量称为指针变量。指针变量是一种特殊的变量,它不同于一般的变量,一般变量存放的是数据本身,而指针变量存放的是数据的地址。举例:inta=68,系统为变量a分配的首地址为0X065FDF4H,声明空指针long*p=NULL,p=&a是存放变量a地址的指针变量,即p=&a中存放的值为0x065FDF4H(a的值为68,&a的值为0x065FDF4H)。对变量a的访问有两种方式:一是直接按地址0x065FDF4H找到a的存储单元,从而对变量a进行访问;二是按系统为p=&a分配的地址先找到p=&a,然后根据p,&a的值(即变量a地址0x065FDF4H)找到变量a在内存中的存储单元,从而对变量a进行访问。对于前一种访问方式称为直接访问方式,后一种访问方式称为间接访问方式。如果一个指针变量存放的是某个对象的地址,则称这个指针变量指向该对象。在C++程序设计中,指针变量只有确定了指向才有意义。参考资料百度百科.百度百科.百度百科:百度百科,百度百科

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

区别:1、本质指针常量:本质上一个常量,指针用来说明常量的类型,表示该常量是一个指针类型的常量。常量指针:本质上是一个指针,常量表示指针指向的内容,说明该指针指向一个“常量”。2、地址指针常量:在指针常量中,指针自身的值是一个常量,不可改变,始终指向同一个地址。在定义的同时必须初始化。常量指针:指针可以指向其他地址3、内容指针常量:指向的内容可以修改常量指针:在常量指针中,指针指向的内容是不可改变的,指针看起来好像指向了一个常量。扩展资料指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区。从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。在32 位程序里,所有类型的指针的值都是一个32 位整数,因为32 位程序里内存地址全都是32 位长。指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为si zeof(指针所指向的类型)的一片内存区。在32 位平台里,指针本身占据了4 个字节的长度。指针本身占据的内存这个概念在判断一个指针表达式(后面会解释)是否是左值时很有用。参考资料:百度百科 - 指针

为什么不能把常量的地址赋给指针变量?

const 右侧是int,也就是说声明int是个常量,常量不可修改。
那么prr是个指向整数常量的指针。
假设
int a;
prr=&a;

如果允许pr=prr,那么通过pr指针就可以修改a,比如 *pr=10;
这违背prr的定义,为防止绕道修改a值而出现错误乱,编译器就会提示错误。

如果你只是想限定prr本身不可修改,可以这么写
int a;
int *pr;
int * const prr=&a;
pr=prr;
将const写在prr前面,使得限定prr本身,也就是说prr是个整数的指针常量,prr的值除了定义时初始化,其他地方不能修改(prr的指向不可改变),但prr指向的地址中的值还是可以修改的。

这样pr=prr,就不会出现冲突,因为他们都指向一个同类型地址,且pr是个普通指针变量,所以可以赋值。


上一篇:md5码

下一篇:虚拟机vmware