int *const && int const * && const int *的区别
ANSIC允许声明常量,常量和变量不同,常量就是不可以改变的量,用关键字const来修饰
比如:const int a
int const a
以上两种声明方式是一样的,我们不需要考虑const和int的先后顺序,按照你理解的方便的一中方式进行应用。
因为const和int的顺序先后并不影响结果,因此 int const * && const int *这两中情况就是一样的
所以我们只需要讨论两种情况
------------------------------------------1:int const *ptr
我们说过const int a;就是声明一个int型的常量,而int * ptr;是声明一个int型的指针变量,因此终上所述int const *ptr就是生命一个指向整形常量的指针,我们可以修改指针的值,但是不可以修改*ptr的值,也就是指针所指向的值;
#include<stdio.h>
int main(){
int a=;
int b=;
int const * p1=&a;
//(*p1)=12; 我们可以修改指针的值,但是不能修改他所指向的值
p1=&b;
printf("%d\n",*p1);
b=;
printf("%d\n",*p1);
return ;
}
上面的程序中,p1的值可被修改,可以指向另一个变量的地址,但是(*p1)的值不可以被修改了
首先const 修饰的是整个*pi(注意,我写的是*pi而不是pi)。所以*pi是常量,是不能被赋值的(虽然pi所指的b是变量,不是常量)。 其次,pi前并没有用const 修饰,所以pi是指针变量,能被赋值重新指向另一内存地址的。
------------------------------------------2:int * const ptr
#include<stdio.h>
int main(){
int a=;
int b=;
int * const p1=&a;
printf("%d\n",*p1);
(*p1)=;
//p1=&b; // 我们可以修改他所指向的值,但是不能修改指针的值
printf("%d\n",*p1); return ;
}
我们这里const修饰的p1,p1的值不能改变,但是我们可以改变他所指向的值
p1有了const的修饰,变成了一个指针常量,不能被修改
整个*p1没有被const修饰,所以*p1是变量,而不是常量
-----------------------------》3转换问题
#include<stdio.h>
int main(){ const int n=;
int *p;
p=(int *)&n;
printf("%d\n",*p);
*p=;
printf("%d\n",*p);
return ;
}
情况一:int * pi指针指向const int n常量的情况
const int n=10;
int *p;
p=&n;//这样可以吗?不行,VC下是编译错。const int 类型的n的地址是不能
//赋值给指向int 类型地址的指针p的。否则p岂不是能修改n的值了吗!
p=(int* ) &n; // 这样可以吗?强制类型转换可是C所支持的。
//VC下编译通过,但是仍不能通过*p=80来修改n的值。去试试吧!看看具体的怎样 情况二:const int * p指针指向const int n的情况
const int n=40;
const int * p;
p=&n;//两个类型相同,可以这样赋值。n的值无论是通过p还是n都不能修改的。 情况三:用const int * const p申明的指针
int n;
const int * const p=&n;
//你能想象p能够作什么操作吗?p值不能改,也不能通过修改n的值。因为不管是
//*p还是p都是const的
int *const && int const * && const int *的区别的更多相关文章
- [转] const int *a与int *const a,const int *const a的区别
http://blog.csdn.net/zhangheng837964767/article/details/33783511 关键问题点:const 属于修饰符 ,关键是看const 修饰的位置在 ...
- const int *a与int *const a,const int *const a的区别
来源:https://blog.csdn.net/zhangheng837964767/article/details/33783511 关键问题点:const 属于修饰符 ,关键是看const 修饰 ...
- C++ char*,const char*,string,int 的相互转换
C++ char*,const char*,string,int 的相互转换 1. string转const char* string s ="abc";const char* ...
- (c++) int 转 string,char*,const char*和string的相互转换
一.int 和string的相互转换 1 int 转化为 string c++ //char *itoa( int value, char *string,int radix); // 原型说明: / ...
- error C2556: 'const char &MyString::operator [](int)' : overloaded function differs only by return type from 'char &MyString::operator [](int)'
char & operator[](int i);const char & operator[](int i);/*const char & operator(int i);* ...
- c#中const、static、readonly的区别
1. const与readonly const ,其修饰的字段只能在自身声明时初始化. Readonly 是只读变量,属于运行时变量,可以在类初始化的时候改变它的值.该类型的字段,可以在声明或构造函数 ...
- C# 总结const、 readonly、 static三者区别:
总结const. readonly. static三者区别: (有人问我,看似简单,我也没能立刻回答出来,总结一下,分享一下.) const:静态常量,也称编译时常量(compile-time con ...
- C++中加const与不加const的区别
“常量”与“只读变量”的区别. 常量肯定是只读的,例如5, "abc",等,肯定是只读的,因为常量是被编译器放在内存中的只读区域,当然也就不能够去修改它. “只读变量”则是在内存中 ...
- [转] const T、const T*、T *const、const T&、const T*& 的区别
这里的T指的是一种数据类型,可以是int.long.doule等基本数据类型,也可以是自己类型的类型class.单独的一个const你肯定知道指的是一个常量,但const与其他类型联合起来的众多变化, ...
- const T、const T*、T *const、const T&、const T*& 的区别
原文地址: http://blog.csdn.net/luoweifu/article/details/45600415 这里的T指的是一种数据类型,可以是int.long.doule等基本数据类型, ...
随机推荐
- ubuntu下增加中文编码
在Ubuntu中,利用命令:locale,来查看系统的语言环境 参考:http://blog.chinaunix.net/uid-94449-id-2002589.html Windows的默认编码为 ...
- JavaScript Engines
http://openaphid.github.io/blog/2013/01/17/part-i-how-to-choose-a-javascript-engine-for-ios-and-andr ...
- NGUI 圆形头像遮罩
NGUI 圆形头像遮罩 列表,求助 http://tieba.baidu.com/p/3961444508
- MySQL关键字(保留字)列表
在使用MySQL的时候,一般尽量避免用关键字作为表名,如使用关键字做表名,需要按标准写法给SQL语句加[](或是“)区分字段名和表名. 下面列出MySQL所有关键字,希望给使用MySQL的朋友提供一些 ...
- javascript函数命名的三种方式及区别
1, function fn(val1,val2) { alert(val1+val2); } fn(1,2); 2, var fn=function() { alert(val1+val2); } ...
- [Mongodb]删除指定字段
摘要 如果想要删除mongodb中一个document的某个字段,该如何做呢? 方法模版 db.user.update({"email_state":{"$exists& ...
- MySql循环插入数据(定义了存储过程)
MySQL一窍不通啊,今天工作上需要用到,请教了别人,做以备忘 DROP PROCEDURE test_insert ; DELIMITER ;; CREATE PROCEDURE test_inse ...
- 利用PHP从淘宝采集评论和成交数据
如果不想通过淘宝开放平台API获取数据,那么另外一个很好的办法就是采集了.一般来说,采集一个网页上的内容,只需要用CURL获取源代码,然后用正则表达式取出需要的内容就可以,不过如果这样载入一个淘宝的页 ...
- 优酷土豆2014校园招聘笔试题目之Java开发类
先总体说下题型,共有20道选择题,4道简答题,3道编程题和1道扩展题,题目都比较简单,限时一小时完成. 一.选择题 选择题非常简单,都是基础题,什么死锁发生的条件.HashMap和HashSet查找插 ...
- 正确地组织python项目的结构
统一的项目结构 写了不少python项目后, 越来越认识到python项目结构重要性. 不管项目是否要开源, 是否要提交pypi, 项目结构的一致性带来的好处还有很多: 多人合作开发大家都有个基本的g ...