码迷,mamicode.com
首页 > 其他好文 > 详细

const,static,全局变量细节及其区别

时间:2015-05-22 17:12:31      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

const:

限制符号,限制某个变量所指向的内容不能通过这个对象修改。

但是可以通过其他的修改,比如:

int main(){
   int x=5;
   const int &y=x;
   x++;
   cout<<y<<" "<<x;
    return 0;
}

结果如下:

技术分享

但是如果这样就通不过编译了

技术分享

所以,const的作用是限制申明出来的变量的权限,所以我们有这么一个等式:

权限小=权限大 权限大!=权限小

什么意思呢:如下:

int main(){
   int x=5;
   const int* y=&x;
   x++;
   cout<<*y<<" "<<x;
    return 0;
}

上式是可以通过编译的,结果为6 6.我们将一个权限大的变量x赋值了一个常量指针指向它。同上x可以改变该变量的值,*y不能,但如果向下式子就不能通过编译了:

int main(){
   const int x=5;
   int* y=&x;
   x++;
   cout<<*y<<" "<<x;
    return 0;
}

因为我们将一个权限是只读的变量让正常指针指向(赋值是不可以的,指针引用不行),无意间扩大了它的权限,这样对于计算机而言意味着风险,所以编译器会禁止这种做法

const最后一个问题是const与指针的问题,const出现在*号前,代表这个指针只能指向常量,出现在*号后,代表这个指针只能指向那块区域,但是那块区域的值可以改动,如下:

int main(){
    const int y=5;
    int z=0;
   const int* x=&y;
   x=&z;
   cout<<*x<<" "<<x;
    return 0;
}

*x为0;

int main(){
    const int y=5;
    int z=0;
    int const* x=&y;
   x=&z;
   cout<<*x<<" "<<x;
    return 0;
}

结果同上

int main(){
    int y=5;
    int z=0;
    int * const x=&y;
    x=&z;
   cout<<*x<<" "<<x;
    return 0;
}

这个式子编译就不过了,但是这样可以:

int main(){
    int y=5;
    int z=0;
    int * const x=&y;
    (*x)++;
   cout<<*x<<" "<<x;
    return 0;
}

static:

static作用有以下两个:

1.规定变量作用区域,就是变量所在的函数或类(同于局部变量),只有在该函数/类才能调用

2.规定变量的存储地址(也就是确定了其生存期),static变量存在静态区域,不是在栈空间,函数/类执行完毕后不会被回收,且其值会一直保留,直至程序结束

全局变量:

全局变量就是静态变量少了第一个约束,它可以被任意的类或函数调用

const,static,全局变量细节及其区别

标签:

原文地址:http://blog.csdn.net/u014403897/article/details/45917257

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!