C++ : 基础系列(数据类型,数据结构)

1: 数据类型 

   C++ 规定在创建一个变量或者常量的时候,必须指定出相应的数据类型,否则无法给该变量分配内存空间。

2: 数据类型范围:

2.1 整型 :

整型变量表示的是整数类型的数据。C++中能够表示整型的类型有以下几种方式(区别在于占用的内存空间不同),我们可以通过 sizeof关键字来统计数据类型所占空间的大小

 2.2  实型(浮点型)

浮点型用来表示小数,浮点型分为两种: 单精度float 和 双精度 double,  两者的区别在于有效数字的表示范围不一样

 2.3  字符型

  字符型类型 用于显示 单个字符。

char str = 'a'  

显示字符型变量时用单引号括起来,不是双引号。单引号内只能有一个字符,不可以是字符串。

1 :在 C和C++ 中,字符型变量只占 1 字节。

2 :字符型变量并不是把所有的字符本身 存储在内存中,而是将 对应的 ASCII 编码 放到内存存储单元中。

2.4 : 字符串

   字符串类型 :用来表示 一串字符,它有两种表示风格

  第一种 : C风格字符串,需要用 双引号括起来

    char  string[] = "hello world C++";

   第二种:需要加入 头文件 #include<string>

   string str = "hello world C++"

2.5 : 布尔型bool 

   布尔类型数据代表 真或假的值

  true  ------真 (1)

  false ------假 (0)

 bool类型只占一个字节

// ConsoleApplication2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//  第二章 :数据类型
// C++ 内置的整型包括: unsigned long,  long, unsigned int,int, unsigned short, short, char,unsigned char,signed char, bool
// C++ 复合类型:类  数组  结构(存储多个不用类型的值)

// C++标准库函数
#include <iostream>
#include <string>


using namespace std;
struct Person
{
    char personName;
    int peisonAge;
};

int main()
{
    // 1: 使用 const 限定符表示常量  (MONTH = MONTH + 1 错误的语法)
    const int MONTH = 12;
    cout << "指定了一个常量month: " << MONTH;

    // 1.1  char类型字符
    std::cout << std::endl;
    char c = '1';
    char c2 = 'a';
    cout << "字符初始化: " << c << endl;
    cout << "字符初始化c2: " << c2 << endl;

    // 2: 数组声明
    int number[] = {1, 2, 2};
    int number2[2] = { 3,4 };

    // 3: string中的“+”操作,不能把两个字面值直接相加,比如string s="hello" + "world"; 是不行的。因为字面值常量不是string类型,“+”运算符两侧至少有一个是string。
    //  C++ 字符串提供了以下两种类型的表现形式
    // 1:C风格的 字符串
    // 2: C++引入的string类类型
    std::cout << std::endl;
    string s("value");
    string s1 = "value2";
    cout << "读出之前定义的字符串s: " << s << endl;
    std::cout << std::endl;
    cout << "读出之前定义的字符串s1: " << s1 << endl;

    char site[4] = { 'a','b','c' }; // 之所以长度是4 ,因为编译器需要在数组末尾补上一个空字符
    cout << "读出之前定义的字符串site: " << site << endl;


    // 4: 结构体简介 :结构是一种比数组更加灵活的方式,可以存储多种数据类型
   

   // 5: 联合体简介: 


    // 6: C++ 地址 : 我们知道每一个变量都有一个内存位置,每一个内存位置都定义 可使用 (&)运算符来访问变量的地址。
    //  var1变量的地址:000000B4F595F9F4
    //  var2变量的地址:000000B4F595FA18
    std::cout << std::endl;
    int var1;
    char var2[10];
    cout << "var1变量的地址:" << & var1 << endl;
    cout << "var2变量的地址:" << &var2 << endl;
    std::cout << std::endl;

    // 6.1 C++ 指针: 指针是一个变量,其值为另一个变量的地址(内存位置的直接地址),所以您必须在使用指针存储其他变量地址之前,对其声明
    // 指针类型不管是 整型,浮点型,字符型还是其他数据类型,他们都是代表内存地址的十六进制数,不同类型指针之间唯一的区别:指针所指向的
    // 变量或者常量的数据类型不同。
    // 约定 : 如果有这么一个指针变量 *ip, 那么: ip : 表示指针变量存储的内存地址, *ip : 表示方位存储的内存地址对于的值

    int var = 20; // 实际变量的声明,存储的值是 20 
    int *ip; // 指针变量的声明

    ip = &var; // 指针变量存储一个内存地址:var的内存地址

    std::cout << std::endl;
    cout << "var 变量的值是:" << var << "\n" << endl; 
    cout << "指针ip 存储的内存地址:" << ip << "\n" << endl;  // 00000096B54FF834
    cout << "指针ip 存储的内存地址 的值:" << *ip << "\n" << endl; // 20 
    cout << "指针ip 本身的内存地址:" << &ip << "\n" << endl; // 00000096B54FF858

    // 6.2 C++指向指针的指针(多级间接寻址):指针的指针就是将:一个指针的本身的地址,放在另一个指针里面取存储
    
    std::cout << std::endl;
    int var3 = 30; // 实际变量的声明,存储的值是 20 
    int *p; // 指针变量的声明
    int **pp; // 指针变量的声明

    p = &var3; // 指针P变量存储一个内存地址:var的内存地址
    pp = &p; // 指针变量pp 存储指针变量p 的本身地址

    cout << "var3 变量的地址是:" << &var3 << "\n" << endl; // 0000005DD58FF904
    cout << "指针 p 存储的内存地址:" << p << "\n" << endl;  //  0000005DD58FF904
    cout << "指针 p 本身的内存地址:" << &p << "\n" << endl; // 0000005DD58FF928
    cout << "指针 p 存储的内存地址 的值:" << *p << "\n" << endl; // 30
    

    cout << "指针 pp 存储的内存地址:" << pp << "\n" << endl; // 0000005DD58FF928
    cout << "指针 pp 本身的内存地址:" << &pp << "\n" << endl; //  0000005DD58FF948
    cout << "指针 pp 存储的内存地址 的值:" << *pp << "\n" << endl; //  0000005DD58FF904

}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内含资源如下: 1.基本数据结构 1.1.Array ........... 动态数组 1.2.LinkedList ... 链表 1.3.BST .............. 二分搜索树 1.4.MapBST ..... 二分搜索树(用于实现映射) 1.5.AVLTree ...... AVL树 2.接口 2.1.Queue ........... 队列接口 2.2.Stack .............. 栈接口 2.3.Set .................. 集合接口 2.4.Map ............... 映射接口 2.5.Merger .......... 自定义函数接口 2.6.UnionFind ..... 并查集接口 3.高级数据结构 3.1.ArrayQueue .......................... 队列_基于动态数组实现 3.2.LinkedListQueue .................. 队列__基于链表实现 3.3.LoopQueue ........................... 循环队列_基于动态数组实现 3.4.PriorityQueue ....................... 优先队列_基于最大二叉堆实现 3.5.ArrayPriorityQueue ............. 优先队列_基于动态数组实现 3.6.LinkedListPriorityQueue ..... 优先队列_基于链表实现 3.7.ArrayStack ............................. 栈_基于动态数组实现 3.8.LinkedListStack ..................... 栈_基于链表实现 3.9.BSTSet ..................................... 集合_基于二分搜索树实现 3.10.LinkedListSet ....................... 集合_基于链表实现 3.11.BSTMap ................................ 映射_基于二分搜索树实现 3.12.AVLTreeMap ....................... 映射_ 基于AVL树实现 3.13.LinkedListMap .................... 映射_基于链表实现 3.14.MaxHeap ............................. 最大二叉堆 3.15.SegmentTree ...................... 线段树 3.16.Trie ......................................... 字典树 3.17.QuickFind ............................ 并查集_基于数组实现 3.18.QuickUnion ......................... 并查集_基于树思想实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值