网站界面ui设计,包头全网营销网站建设,wordpress 主题轮播,中铁建设集团有限公司基础设施事业部关于const#xff0c;我曾因为其在C和C中的不同#xff0c;还有一些编译器对未定义的处理不同#xff0c;搞得晕头转向…
后来有次在阅读《C primer plus》中我终于梳理了有关const的结论。
1.const基础知识
首先要明白const的难点在于修饰指针的时候#xff0c;对于con…关于const我曾因为其在C和C中的不同还有一些编译器对未定义的处理不同搞得晕头转向…
后来有次在阅读《C primer plus》中我终于梳理了有关const的结论。
1.const基础知识
首先要明白const的难点在于修饰指针的时候对于const int* const ptr;来说 前一个const修饰*ptr不能将*ptr的值改变 后一个const修饰ptr不能将ptr的值改变
2.const基本规则
在C中 把const数据或者非const数据的地址“初始化”或者“赋值给”指向const的指针是合法的 只能把非const数据的地址“赋值给”非const的指针 规定使用非const标识符修改const数据导致的结果是未定义的编译器遇到这样的代码时可能给出警告因为这样子就可以通过新的指针改变const指针指向的数据 //演示规则1void test_1(){double arr1[3] { 1.2,3.2,3.14 };//非constconst double arr2[4] { 0.12,1.2,3.2,3.14 };//constconst double* pnc arr1;//有效初始化pnc arr1[1];//有效赋值pnc arr2;//有效赋值int i 10;int* p i;const int** pp p;*pp}//演示规则2void test_2(){double arr1[3] { 1.2,3.2,3.14 };const double arr2[4] { 0.12,1.2,3.2,3.14 };double* pnc arr1;//有效初始化pnc arr1[1];//有效赋值pnc arr2;//无效并且VS2022给出警告}//演示未定义行为#include stdio.hint main(){const int i 10;//不可修改iconst int* pi i;//不可修改(*pi)int* temp pi;*temp 20;printf(%d\n, i);return 0;}//在vs2022的17.7.0版本中这样做是可以的输出20//在CentOS7下的gcc的4.8.5版本中直接不给编译进行报错吐槽是谁造谣可以用非const指针绕过去修改const数据的啊VS2022可以做到那我们换个平台试试。 你动下试试类型检查这一方面直接就过不了关…