发布网友 发布时间:2022-04-22 07:43
共5个回答
热心网友 时间:2022-06-17 22:53
区别就是,指针变量 就是这个指针是可以改变的,指针常量就是这个东西是不可改变的。
char* p; //p指向的内容可以改变
const char* p; // p指向的内容不可改变
char* const p; //p不可改变,但是p指向的值是可以被改变的
绕了半天,好像还是没有明白,对吧,为啥要整这些玩意呢?
老师上课也是讲这些玩意,讲了半天,大家头都晕了,还是没有明白,感觉就是文字游戏嘛。
忽然有一天,我恍然大悟了。为什么?因为现在的软件项目开发,是多个人一起完成的,不是你单*匹马的干的。给你举个例子就明白了。
假定你开发的程序,提供一个接口,访问一个固定的端口,你用一个指针指向这个端口,初始化一些数据之后返回给调用者;另外一个人开发的程序是每次从这个端口读数据到内存里,可是他写程序的时候不小心,把这个指针改变了,结果本来从网卡读数据的,变成从USB读了,电脑没插USB,结果弹出一个xxxx内存不能为读,程序崩溃了。
这个时候你大骂他笨蛋,你为何改我的端口呢?他反驳你,说你开发的程序返回的是普通指针,没说不让改啊。啊,如果你当时开发的时候就把指针设定成不能改的,也就是const,那么别人就改不了,这个错误也就能得到避免,那么软件开发就不会有这么多问题了,程序也会更加稳定。
热心网友 时间:2022-06-17 22:54
常变量和普通变量的最大区别是常变量的值不可修改!
例如:
1、
int q=0,s=0;
const int* p=&q; //初始化
p=&s; //错误!p是常变量,不能修改其值
********************************
2、
int q=0,s=0;
int *p=&q; //初始化
p=&s; //正确!
int
热心网友 时间:2022-06-17 22:54
指针常量定义好了指向的内存后不能修改指向,但是可以修改指向好的地址的内容,常量不能修改内容。
例如int a = 10,b;int * const p2 =&a;之后你可以*p2=19,这样a=19,但是你不能p2 = &b,而const int a =10
后就不能修改a的值了,指针变量时可以修改指针指向的地址的int *p =&a 后 p = &b
热心网友 时间:2022-06-17 22:55
int b; int c;
int* const p=&b; //指针常量
p=&c; //错误
*p=100; //正确
一般指针常量与常量指针比较用的多,这也是最容易混淆的
int b; intc;
const int* p=&b; //常量指针
p=&c; //正确
*p=100; //错误
指针变量就是一个普通的指针 ,比如 int *p;
指针常量指向的地址不能变,但是其值可以变;
普通常量 ,比如 const int i=10; i 的值就不能变了,如果再执行语句i=20;那么就会报错
热心网友 时间:2022-06-17 22:55
地址不变,值可以变