欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++学习笔记04

程序员文章站 2022-07-16 13:23:24
...

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) 只能在本文件中使用!具有内部链接的静态;不允许在其他文件里调用;
静态局部变量和作用域和局部变量一样,不过生存周期不一样,局部变量在定义局部变量的函数调用完之后就从内存中释放其值,而静态局部变量不释放,等整个程序全部执行结束后才会从内存中释放。

关于外部链接的含义
首先从静态变量说起. C语言里面静态变量有三种: 分别是外部链接性,内部链接性和无链接性.
声明外部链接的变量的方法是在代码块外面声明它. 此变量是全局变量,多文件中亦可用.
声明内部链接的变量的方法是在代码块外面声明它并加上static限定符. 此变量是全局变量,但仅在本文件中可用.
声明无链接的变量的方法是在代码块里面声明它并加上static限定符. 此变量是局部变量,但仅在本代码块中可用.
例如

#include<...........>
int global=1;   //声明外部链接的变量
static int global2    //声明内部链接的变量
int func()
{
int global=5;      //声明的内部变量和全局变量重名,调用时将会隐藏全局的global;
cout<<global;   //是内部定义的global的值而不是外面的值.
//如何引用外面的变量呢???
cout<<::global;   //可用作用域解析符(::)来说明你要输出的外面的全局变量.
static int global3;   //声明无链接的变量
}
int main()
{
extern int alobal;  //在本文件中此句可选.此句的意思为你需要引用外部的变量global;
global=8;    //直接引用全局变量.
}

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