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;
} 展开
int main(void)
{
int *p1, const *a;
*a=1;
*a=2;
return 0;
} 展开
3个回答
展开全部
因为p1、a是指针,如果给它们初始化的话,p1、a必须指向一个已经声明的变量。如果初始化时随便给它一个数字,就不知道它们指向哪里了,而很多存储地址是不能访问的。
可以这样:
int p1;
const int *a = p1;
可以这样:
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 *类型。
望采纳。
展开全部
int *p1, const *a;
注意你这个写法非标准C++的东西,所以一般编译器会忽略const!
以后不要这样写代码,非但别人看不懂,还会造成潜在的危险!
注意你这个写法非标准C++的东西,所以一般编译器会忽略const!
以后不要这样写代码,非但别人看不懂,还会造成潜在的危险!
追问
额 我只是想问const *a为什么可以不初始化 麻烦你能解释下
追答
你的这种写法,如果vs不忽略的话等同于int const *a;
你只要记住const在*前,表示指向的内容为const. 并不是a这个指针是const指针。
所以你不初始化也是可以的。但是你下面的代码*a=1;就不对了。因为内容是const,所以不能更改,这个代码你之所以能编译通过,就是我说的,编译器将const忽略了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我记得在指针里,const的使用方法有三种,他们代表的意义也不同。(如果没有记错的话^_^)
一种是这样的,const type *name=...;它的意义是,定义了一个常量指针,常量指针就是指针里面的值(就是地址)是不能被改变的。
还有一种是这样的,type const *name;它的意义是,定义了一个变量指针,但是他是指向一个常量的地址的。
还有一种更加丧心病狂的,const type const *name=...;它的意义是,定义了一个常量指针,指针指向一个常量。
如果有错的话,还请更正。
一种是这样的,const type *name=...;它的意义是,定义了一个常量指针,常量指针就是指针里面的值(就是地址)是不能被改变的。
还有一种是这样的,type const *name;它的意义是,定义了一个变量指针,但是他是指向一个常量的地址的。
还有一种更加丧心病狂的,const type const *name=...;它的意义是,定义了一个常量指针,指针指向一个常量。
如果有错的话,还请更正。
追问
我知道 我只是想问const *a为什么可以不初始化 麻烦你能解释下
追答
int const *a,如上所述,是一个指向常量的指针变量,换一句话说,就是a还是一个变量,只是它的内容“装”着一个常量。
这样的解释,还能理解吧。
不过,再怎么说,都比上自己去相应的书里面找一找。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询