C++学习笔记04

来源:互联网 发布:红黑树 java 编辑:程序博客网 时间:2024/06/05 03:00

1:C++ SegmentFalut 错误 计算机是段页式存储管理方式管理,首先是段地址,然后是页地址,最后是偏移量,然后把虚拟地址转换为物理地址。SegmentFalut就是使用虚拟地址找不到合法的物理地址,通常都是因为指针使用使用错乱导致的。指针使用错乱导致虚拟地址找不到合法的物理地址(找不到或者找到了其他进程的地址),Linux会保护进程,所以操作系统的做法就是直接返回,报Segment Falut的错误。
KleeFp的中Gcc不同的版本的String的编码不同,所以导致出现问题,使用C风格的char*字符串它会使用C风格来解析,这样就应该没问题了。
在注意下,首先C和C++的编码标准都不一样,比如C++对函数的编码和C对函数的编码; 同时针对不同版本的C++的编码也不一样,可能出现不兼容的情况,比如C++98的string和C++11的string。

2,变量类型:
自动类型:比如局部类型变量

静态类型:*static变量。前面说过,所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问。此例中,a是全局变量,msg是函数,并且都没有加static前缀,因此对于另外的源文件main.c是可见的; 如果加了static,就会对其它源文件隐藏。*例如在a和msg的定义前加上static,main.c就看不到它们了。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏。

寄存器类型:使用寄存器存储,而不是内存,比如循环变量

外部类型extern:外部类型变量必须是全局变量,在C++中有两种情况要使用外部类型变量:一:在一个源程序文件中,在全局定义之前使用,必须要做外部类型声明;二:一个文件要引用另一个文件的全局变量,引用之前必须要做外部声明。如果某文件中定义的全局变量不想被其他文件调用所在文件,直接申请为静态变量,也就是静态全局变量只能供所在文件使用。

3,全局变量与全局静态变量的区别:
(a)若程序由一个源文件构成时,全局变量与全局静态变量没有区别。
(b)若程序由多个源文件构成时,全局变量与全局静态变量不同:全局静态变量使得该变量成为定义该变量的源文件所独享,即:全局静态变量对组成该程序的其它源文件是无效的。
(c)具有外部链接的静态;可以在所有源文件里调用;除了本文件,其他文件可以通过extern的方式引用;

静态全局变量的作用:
(a)不必担心其它源文件使用相同变量名,彼此相互独立。
(b)在某源文件中定义的静态全局变量不能被其他源文件使用或修改。
(c) 只能在本文件中使用!具有内部链接的静态;不允许在其他文件里调用;
静态局部变量和作用域和局部变量一样,不过生存周期不一样,局部变量在定义局部变量的函数调用完之后就从内存中释放其值,而静态局部变量不释放,等整个程序全部执行结束后才会从内存中释放。

所以,全局变量和静态变量和全局静态变量是不一样的!!!!!

原创粉丝点击