const变量定义时必须初始化 但是这个下面定义在c++中怎么可以不初始化

#include<stdio.h>intmain(void){int*p1,const*a;*a=1;*a=2;return0;}... #include <stdio.h>
int main(void)
{
int *p1, const *a;

*a=1;
*a=2;

return 0;
}
展开
 我来答
宋景贤
2014-02-27 · 超过30用户采纳过TA的回答
知道答主
回答量:81
采纳率:0%
帮助的人:64万
展开全部
因为p1、a是指针,如果给它们初始化的话,p1、a必须指向一个已经声明的变量。如果初始化时随便给它一个数字,就不知道它们指向哪里了,而很多存储地址是不能访问的。
可以这样:
int p1;
const int *a = p1;
追问
我只是想问const *a为什么可以不初始化   麻烦你能解释下
追答
编译时产生如下警告:

warning C4228: nonstandard extension used : qualifiers after comma in declarator list are ignored
意思是声明语句逗号后面的限定符const被忽略了,那么a就只是一个普通的int *类型,而非int const *类型。
望采纳。
大话修身
2014-02-27 · TA获得超过2533个赞
知道小有建树答主
回答量:252
采纳率:0%
帮助的人:189万
展开全部
int *p1, const *a;
注意你这个写法非标准C++的东西,所以一般编译器会忽略const!
以后不要这样写代码,非但别人看不懂,还会造成潜在的危险!
追问
额 我只是想问const *a为什么可以不初始化   麻烦你能解释下
追答
你的这种写法,如果vs不忽略的话等同于int const *a;
你只要记住const在*前,表示指向的内容为const. 并不是a这个指针是const指针。
所以你不初始化也是可以的。但是你下面的代码*a=1;就不对了。因为内容是const,所以不能更改,这个代码你之所以能编译通过,就是我说的,编译器将const忽略了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
iamchenmin
推荐于2017-09-12 · TA获得超过1199个赞
知道小有建树答主
回答量:625
采纳率:50%
帮助的人:314万
展开全部
我记得在指针里,const的使用方法有三种,他们代表的意义也不同。(如果没有记错的话^_^)

一种是这样的,const type *name=...;它的意义是,定义了一个常量指针,常量指针就是指针里面的值(就是地址)是不能被改变的。
还有一种是这样的,type const *name;它的意义是,定义了一个变量指针,但是他是指向一个常量的地址的。
还有一种更加丧心病狂的,const type const *name=...;它的意义是,定义了一个常量指针,指针指向一个常量。

如果有错的话,还请更正。
追问
我知道 我只是想问const *a为什么可以不初始化   麻烦你能解释下
追答
int const *a,如上所述,是一个指向常量的指针变量,换一句话说,就是a还是一个变量,只是它的内容“装”着一个常量。
这样的解释,还能理解吧。
不过,再怎么说,都比上自己去相应的书里面找一找。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式