zoukankan      html  css  js  c++  java
  • 06_指针基础

    指针(地址编号)

    一 概念

    为了方便访问内存中的内容,给每一个内存单元编号,我们称这个编号为地址,也就是指针。

    指针是一种数据类型 所以 指针有自己的内存 存储的是编号(地址)

    * 要素

    1 指针本身的类型 指向的按类型*
    2 指针指向的类型 可以是所有类型 包括是指针类型、数组类型、函数类型……
    但是具体某种类型指针 只能指向具体的类型
    3 指针本身的内存 用来存指向的内容的地址(指针里面只有编号)(四个字节)
    4 指针指向的内存 可以是各种类型 内存大小不限定

    二 定义

        // 类型 变量名;
    int num = 10;
    // 类型 变量名;
    // 指针类型 指针名;
    // 指向的类型* 指针名;
    // *:指针定义 在定义时 表示定义的是一个指针
    // *:取内容符 在别的地方 表示取后面的这个指针的内容
    // &:取地址符 表示取地址
    int* pnum = #
    *pnum = 2; // 等价于 num = 2;
    cout << num << endl;

    三 内存

    因为指针只存编号(地址),所以,所有指针本身的内存:四个字节。

    四 赋值

    1 用对应类型的地址

    int num = 0;
    int* pnum;
    pnum = &num;

    2 用相同类型的指针

    int num = 0;
    int* p1 = &num;
    int* p2 = p1;

    3 直接用地址

    int* pi = (int*) 0X36;

    4 用数组名

    数组名就是数组的首地址
    int arr[5] = {1,2,3,4,5};
    int* parr = arr;

    5 字符串(char*)

    cout<< char*类型指针<<endl;
    此时会打印字符串
    char* pch = "gkul";

    int arr[5] = { 1, 2, 3, 4, 5 };
    cout << arr << endl;
    char str[5] = { '1', 's', '4', 'b', '' };
    cout << str << endl;
    char* pch = "ghjk";
    cout << pch << endl;
    // 字符数组首地址 是char*类型
    // char*类型可以直接cout整个字符串 直到''为止

    6 置空

    有时候,指针定义后或使用后,没有了指向,但是指针还在。

    由于指针可以直接操作内存,不安全。

    所以在内存开始时(地址编号为0)的地址,作为一个特殊地址。

    将指针指向这里是安全的。

    int* p1 = NULL;
    int* p2 = nullptr;
    int* p3 = (int*)0X0;

    7 多级指针

        int num = 10;
    cout << num << endl; // num的值
    cout << &num << endl; // num的地址
    int* pnum = &num;
    cout << pnum << endl; // num的地址
    cout << *pnum << endl; // num的值
    cout << &pnum << endl; // pnum的地址
    int ** pp = &pnum;
    cout << pp << endl; // pnum的地址
    cout << *pp << endl; // num的地址
    cout << **pp << endl; // num的值
    cout << &pp << endl; // pp的地址
    int *** ppp = &pp;
    cout << ppp << endl; // pp的地址
    cout << *ppp << endl; // pnum的地址
    cout << **ppp << endl; // num的地址
    cout << ***ppp << endl; // num的值


    short sh = 10;
    short* psh1 = &sh;
    short* psh2 = psh1;
    short** ppsh1 = &psh2;
    short** ppsh2 = ppsh1;
    short*** pppsh = &ppsh2;
    ***pppsh = 9;
    cout << "sh = " << sh << endl;

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    能量项链
    开学前最后一天信奥赛一本通重刷日记
    重刷信奥赛一本通日记-3
    重刷信奥赛一本通日记-2
    重刷信奥赛一本通日记-1
    第二次考试题解way
    第一次考试题解
    第一次考试感言
    「HNOI2012」矿场搭建
    「HAOI2006」受欢迎的牛
  • 原文地址:https://www.cnblogs.com/ZhenXin0101/p/13475120.html
Copyright © 2011-2022 走看看