博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

数据结构基础——基本概念

Posted on 2022-07-28 18:08  _L灬  阅读(34)  评论(0编辑  收藏  举报

基本概念

1. C++内置类型

  内置的C++类型分两组,基本类型和符合类型。

  基本类型包括整形、浮点数及两者的多种变体。

  复合类型包括数组、字符串、指针、引用、结构体和共用体等。

2. C++的基本整形

  按宽度递增的顺序排列,分别是char、short(也可称为短整型)、int(也可称为整形)和long(也可称为长整型),其中每种类型都有无符号版本和有符号版本。

3. 内存分区

  1)堆:由程序员手动分配和释放,完全不同于数据结构中的堆,分配方式类似链表。由malloc(C语言)或new(C++)来分配,free(C语言)和delete(C++)释放。若程序员不释放, 程序结束时由系统释放。

  2)栈:由编译器自动分配和释放的,存放函数的参数值、局部变量的值等。操作方式类似数据结构中的栈。

  3)全局(静态)存储区:存放全局变量和静态变量。包括DATA段(全局初始化区)与BSS段(全局未初始化区)。其中,初始化的全局变量和静态变量存放在DATA段,未初始化的全局变量和未初始化的静态变量存放在BSS段。程序结束后由系统释放。

  其中BSS段的特点是:在程序执行之前BSS段会自动清0。所以,未初始化的全局变量与静态变量在程序执行之前已经成0了。

  4)文字常量区:常量字符串就是放在这里的。程序结束后由系统释放。

  5)程序代码区:存放函数体的二进制代码。

以下代码有助于理解上述概念。

 1 int k = 1;
 2 void main() {
 3     int i = 1;
 4     char *j;
 5     static int m = 1;
 6     char *n = "hello";
 7 
 8     ptinrf("栈的地址为:0x%x\n", &i);    /* 变量n位于栈上,其内容为一地址,指向与
 9         文字区常量的"hello",此时"hello"在内存中只有一份拷贝;
10         而语句“ char a[] = "hello"; ” 则不同,拷贝到它所占的内存中,此时"hello" 有两份
11         拷贝。
12         */
13 
14     j = (char*)malloc(2);
15     free(j);
16     printf("堆区地址为:0x%x\n", j);
17     printf("全局变量地址为:0x%x\n", &k);
18     printf("静态变量地址为:0x%x\n", &m);
19     printf("文字常量区地址为:0x%x\n", n);
20     printf("程序区地址为:0x%x\n", &main);