免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: Com_Net
打印 上一主题 下一主题

const int *a, int const *a,int * const a, 有什么不同啊,谁可以举个例子呢? [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
11 [报告]
发表于 2006-01-06 22:04 |只看该作者
它对c也是适用的。
尤其是对你的问题。

论坛徽章:
0
12 [报告]
发表于 2006-01-06 22:31 |只看该作者
const int *a means "a is a pointer to int read-only";
int *const a means "a is a read-only pointer to int";
我没太看明白,可不可以解释一下

论坛徽章:
0
13 [报告]
发表于 2006-01-06 23:35 |只看该作者
解释一下,不知道这样你能不能看明白

关键问题点:const 属于修饰符 ,关键是看const 修饰的位置在那里
1、const int *a
这里const 修饰的是int,而int定义的是一个整值
因此*a 所指向的对象 值 不能通过 *a 来修改,但是 可以重新给 a 来赋值,使其指向不同的对象
eg:
       const int *a = 0;
       const int b = 1;
       int c = 1;
        a = &b  //ok!  额外:注意不能通过a 来修改 b值
     a = &c  //ok!   额外:虽然c本身不是一个常量
     *a = 2  //erro! 为题就在这里,不能修改通过 *a 所指向的对象值,最后赋值得对象是c,因此不能通过*a 来修改c值。
2、int  *const a       
这里const修饰的是 a ,a代表的是一个指针地址
因此不能赋给a其他的地址值,但可以修改a指向的值
这有点和cont int *a相反的意味,例子就不说了

3、至于int const *a 和 const int *a 的意义是相同的 他们两个的作用等价

补充:
4、const int * const a
这个代表a所指向的对象的值以及它的地址本身都不能被改变

关于const的点滴补充:
1、const 对象的地址只能赋值给指向const 对象的指针
2、指向const 对象的指针可以 被赋 以 一个非const 对象的地址
3、指向const 得指针常被用作函数的形式参数,保证被传递给函数的实际对象在函数得实际对象在函数中不会被修改
4、常量在定义后就不能被修改,所以它必须被初始化。未初始化的常量定义将导致编译错误(上面都是在说明const得问题,所以没有赋值,实际语句中要赋值的)

论坛徽章:
0
14 [报告]
发表于 2006-01-06 23:54 |只看该作者
谢谢,解释的非常清楚,可以收藏了 ^_^

论坛徽章:
0
15 [报告]
发表于 2006-01-07 00:14 |只看该作者
const 是一个左结合的类型修饰符,它与其左侧的类型修饰符和为一个类型修饰符,所以,int const *a 和 const int *a 意义相同,int const *a限定的是*a,不是a(也即a可变,*a不可变),同理,int *const a限定的是a,不是*a(也即a不可变,*a可变)

论坛徽章:
0
16 [报告]
发表于 2006-01-07 09:49 |只看该作者

\\\\

谢过楼上各位!!

论坛徽章:
0
17 [报告]
发表于 2006-01-09 16:41 |只看该作者

鄙人的一个例子

#include <iostream>
using namespace std;

int main()
{
  char ch1='a';
  char ch2='b';
  
  const char *p1 = &ch1;
  cout << *p1 << endl;
  p1 = &ch2;
  cout << *p1 << endl;
  //*p1 = 'g';  错误:const 修饰指针指向的值
  
  char* const p2 = &ch1;
  *p2 = 'c';
  cout << *p2 << endl;
  //p2 = &ch2;  错误:const 修饰指针
  
  const char* const p3 = &ch1;
  cout << *p3;
  //p3 = &ch2;  错误:第二个const 修饰指针
  //*p3 = 'g';  错误:第一个const 修饰指针指向的值
  
  return 0;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP