114网站建设河南建设信息网首页
114网站建设,河南建设信息网首页,企业网站建设需求调查表,模拟手机营销网站对于相同变量名的变量#xff0c;CPP会覆盖作用域大的变量#xff0c;而使用作用域小的变量#xff0c;如果想在函数体内使用全局的变量可以在变量名前加上::加以区分#xff0c;比如warm3会使得局部的warm变量等于3#xff0c;而::warm3会使得全局的warm3 。 存储描述持…对于相同变量名的变量CPP会覆盖作用域大的变量而使用作用域小的变量如果想在函数体内使用全局的变量可以在变量名前加上::加以区分比如warm3会使得局部的warm变量等于3而::warm3会使得全局的warm3 。 存储描述持续性作用域链接性声明举例自动变量自动代码块无在代码块函数中int a 0;静态无链接性变量静态代码块无在代码块函数中使用关键字staticstatic int a 0;(函数体内)静态外部链接性变量静态文件外部不在任何函数内放置在全局int a 0;(全局)静态内部链接性变量静态文件内部不在任何函数内使用static声明static int a 0;(全局) 3.
静态外部链接性变量可以在不同文件中使用但是只能有一个文件定义一个该变量其他文件必须使用关键字extern声明改变量例如extern int a;相同的变量名放置在不同文件全局如果不使用以上方法的话只能设置为一个是外部链接和一个是内部链接的变量。 4.
命名空间注意点:
命名空间可以是全局的也可以位于另一个命名空间。 namespace element{namespace fire{int flame;}int water}命名空间具有传递性,如下图using namespace myth;等于using namespace elemet;加上using namespace myth; namespace myth{using std::cout;using std::cin;using namespace element; }可以给命名空间建立别名。 namespace mythvery_myth_namespace;可以通过一下方式简化对于嵌套命名空间的使用 namespace MEFFmyth::element::fire;using MEF::flame;可以使用没有名字的命名空间 namespace {int ice;}可以在不同文件对同一命名空间添加相关数据但是但是如果有文件没有包含某个文件但是包含其他和该文件一样命名空间的文件那么是不能使用该文件的相关数据的。 5. 定位new运算符可以从程序员选择的指定位置分配一块空间给变量其作用是设置该变量的内存管理规程处理需要通过特定地址进行访问的硬件或者在特定位置创建对象。 #includeiostream#includenewconst int BUF 512;const int N 5;char buffer[BUF];int main(){double* pd1, * pd2;int i;pd1 new double[N];pd2 new (buffer) double[N];for (int i 0; i N; i){pd2[i] pd1[i] 1000 20.0 * i;}std::cout Memory addresses:\n;std::cout heap: pd1 static: (void*)buffer std::endl;std::cout Memory contents:\n;for (int i 0; i N; i){std::cout pd1[i] at pd1[i] ; ;std::cout pd2[i] at pd2[i] std::endl;}double* pd3, * pd4;pd3 new double[N];pd4 new (buffer) double[N];for (int i 0; i N; i){pd3[i] pd4[i] 1000 40.0 * i;}std::cout Memory contents:\n;for (int i 0; i N; i){std::cout pd3[i] at pd3[i] ; ;std::cout pd4[i] at pd4[i] std::endl;}delete[] pd1;pd1 new double[N];pd2 new (buffer N * sizeof(double)) double[N];for (int i 0; i N; i)pd2[i] pd1[i] 1000 60.0 * i;std::cout Memory contents;\n;for (int i 0; i N; i){std::cout pd1[i] at pd1[i] ; ;std::cout pd2[i] at pd2[i] std::endl;}delete[] pd1;delete[] pd3;return 0;}Memory addresses:heap: 000001AE8B4685E0 static:00007FF72FC9F440Memory contents:1000 at 000001AE8B4685E0; 1000 at 00007FF72FC9F4401020 at 000001AE8B4685E8; 1020 at 00007FF72FC9F4481040 at 000001AE8B4685F0; 1040 at 00007FF72FC9F4501060 at 000001AE8B4685F8; 1060 at 00007FF72FC9F4581080 at 000001AE8B468600; 1080 at 00007FF72FC9F460Memory contents:1000 at 000001AE8B468570; 1000 at 00007FF72FC9F4401040 at 000001AE8B468578; 1040 at 00007FF72FC9F4481080 at 000001AE8B468580; 1080 at 00007FF72FC9F4501120 at 000001AE8B468588; 1120 at 00007FF72FC9F4581160 at 000001AE8B468590; 1160 at 00007FF72FC9F460Memory contents;1000 at 000001AE8B468490; 1000 at 00007FF72FC9F4681060 at 000001AE8B468498; 1060 at 00007FF72FC9F4701120 at 000001AE8B4684A0; 1120 at 00007FF72FC9F4781180 at 000001AE8B4684A8; 1180 at 00007FF72FC9F4801240 at 000001AE8B4684B0; 1240 at 00007FF72FC9F488定位new运算符将pd2放在buffer数组里面但是程序会将buffer数组进行强制转换成(void *)。 定位new运算符将不识别哪些内存单元已经被使用过也不查找未使用的内存块仅仅根据程序员分配的位置作为起始位置来分配地址 delete只能处理指向常规new运算符分配的堆内存而不处理定位new运算符所以通过使用定位new运算符分配的空间不能使用delete处理。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/87304.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!