欢迎访问 生活随笔!

凯发ag旗舰厅登录网址下载

当前位置: 凯发ag旗舰厅登录网址下载 > 编程语言 > c/c >内容正文

c/c

c与c 在const用法上的区别 -凯发ag旗舰厅登录网址下载

发布时间:2025/1/21 c/c 19 豆豆
凯发ag旗舰厅登录网址下载 收集整理的这篇文章主要介绍了 c与c 在const用法上的区别 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

       首先,c和c 在大体结构上不同,却在语法上相同。  所以在使用的时候,我们会时常遇到一些莫名其妙的问题,觉得语法上是正确的,但是编译的时候却出现一个红色的 error! 比如今天我遇到的这个有意思的问题。

     1. 今天看到一段代码,觉得很有意思:

1 #pragma warning(disable : 4090) 2 3 #include 4 5 int main(int argv, char args []) { 6 7 const int var = 4; 8 int *p = &var; 9 *p = 1; 10 printf("%d\n",var); 11 getchar(); 12 }

 答案很定不用说:    1      原因也很简单:  c弱类型语言,c 是强类型语言。  p指针指向了var的地址,并将var的值改变!

但是,我们再看看,这个两个代码:

1 #include 2 3 using namespace std; 4 5 int main(int args , char argv[]) { 6 7 const int var = 10; 8 std::cout << "var =" << var << std::endl; 9 // int * p= &var; --不能转换,会报错! 10 //可以使用强制转换 11 int *p = (int *)&var; 12 *p = 3; 13 std::cout << "*p =" << *p << std::endl; 14 int num[var]; 15 16 int i = 0; 17 //初始化 18 for (auto data : num) { 19 data = i; 20 std::cout<<"num["<1<<"] =" << data << std::endl; 21 } 22 getchar(); 23 return 0; 24 }

2.  即便你用这个const_cast《》:强制去掉const属性,但是*p=3,这条语句 ,p指向的地址的值任然没有改变!这两个代码的值,都是这个:

1 #include 2 3 using namespace std; 4 5 int main(int args , char argv[]) { 6 7 const int var = 10; 8 std::cout << "var =" << var << std::endl; 9 // int * p= &var; --不能转换,会报错! 10 //可以使用强制去掉const 属性 11 int *p = const_cast<int *>(&var); 12 *p = 3; 13 std::cout << "*p =" << *p << std::endl; 14 std::cout << "var =" << var << std::endl; 15 int num[var]; 16 17 int i = 0; 18 //初始化 19 for (auto data : num) { 20 data = i; 21 std::cout<<"num["<1<<"] =" << data << std::endl; 22 } 23 getchar(); 24 return 0; 25 }

 

结果

为:   我们可以看到,var的值,没有改变!  原因是c 是强类型语言,c 的数据的类型更加严格与苛刻 !  

   当然对于c 为何会出现指针的值为*p=3而var=10这样的情况,其实,*p所指的常量地址真实的内存已经修改了,但是编译器并没有从内存地址中取值,而是直接从寄存器中取的值,所以var=10依旧表面上依旧没有发生什么改变!

 

     2.   那么,对于指针而言呢? const 用到指针就会发挥大作用,可以设定权限,比如  int const * p   /  const int *p (这两个其实可以看做是同一个类型)均为常量指针, 还有 int * const p 指针常量,还有const int  * const p  ;

        根据它们的特性  权限如下:

            int  const *p        -----只能读,不能写,既然是指向常量的指针,当然是可以指向其他常量的。

            int  *  const p     -----能读也能写,但是既然是指针常量, 当然是不能指向其他地址,无法修改其他地址的值。

        int const * const p    ----能读不能写,而且无法指向其他地址的值。

      这样就可以设定权限,对于系统而言,这个是很安全而且很妥当的,还很power ! 当然还可以运用到指针函数什么的 ! 这样const其实作用还是很有用初 的!  特别是用在对安全要求很高的系统,比如银行的系统什么的 

总结

以上是凯发ag旗舰厅登录网址下载为你收集整理的c与c 在const用法上的区别的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发ag旗舰厅登录网址下载网站内容还不错,欢迎将凯发ag旗舰厅登录网址下载推荐给好友。

  • 上一篇:
  • 下一篇:
网站地图