Chinaunix首页 | 论坛 | 博客
  • 博客访问: 703298
  • 博文数量: 126
  • 博客积分: 2944
  • 博客等级: 上校
  • 技术积分: 1160
  • 用 户 组: 普通用户
  • 注册时间: 2005-02-17 11:09
个人简介

文章分类

全部博文(126)

文章存档

2022年(1)

2018年(1)

2017年(5)

2016年(5)

2013年(5)

2012年(21)

2011年(24)

2010年(1)

2009年(2)

2008年(12)

2007年(6)

2006年(19)

2005年(24)

分类: C/C++

2008-05-07 15:56:00

    左和右这两个概念似乎被引用的挺多的. 好像有个漫画, 后来被改成电影, 向左走, 向右走? 仿佛还有小说什么的. 最近则是电影名字, <左右>.

    今天用const的时候, 被左右搞糊涂了, 到底const作用到右边还是左边来着? 比如:
              const int * p;   -------- ①
              int * const p;   -------- ②
              int const * p;   -------- ③

    答案:

        ①和③是一样的, 指向的整数是常量, 不可改变; ②指针是常量, 不可改变.

    所以, 是左.

    当然, ①和③指向的整数不能通过*p的方式赋值,但并不影响通过别的方式使之改变. 比如再定义一个普通指针指向那个地址, 那么可以通过这个普通指针改变地址里面的值.

另:
    const位于头文件中:一般而言,定义不允许出现在头文件中,因为定义只能有一次,而声明可以有多次。但是用C++中const定义的变量可以位于头文件中。原因在于c++中const定义的变量默认是局部变量。由此,以static修饰的变量定义可以出现在C语言的头文件中。

const更严谨,因为有类型限制;但const要占用额外的空间,编译出的程序体积大些:
// a.h                           //b.h
#define CC 7                int const CC = 7;
----------------------              ----------------------
//a.c                            //b.c
#include "a.h"              #include "b.h"
int main()                     int main()
{                                  {
  int i = CC;                     int i = CC;
  return 0;                       return 0;
}                                  }
----------------------             ----------------------
//a1.c                        //b1.c
#include "a.h"            #include "b.h"
void f1()                      void f1()
{                                 {
  int i = CC;                    int i = CC;
}                                 }
----------------------            ----------------------

$g++ a.c a1.c -S
$g++ b.c b1.c -S

下图左边是a.s, 右边是b.s。可看出b.s多了rodata区域。



阅读(1048) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~