首页 > 编程语言 >C++指针【cherno课程学习】

C++指针【cherno课程学习】

时间:2023-01-08 19:59:13浏览次数:37  
标签:cherno int C++ buffer var main ptr 指针

定义:

指针是一个整数,一种存储内存地址的数字

  1. 内存就像一条线性的线,在这条街上的每一个房子都有一个号码和地址
  2. 类似比喻成电脑,这条街上每一个房子的地址 是一个字节
  3. 我们需要能够准确找到这些地址的方法,用来读写操作

因此,指针就是这些地址。不要考虑类型,无论是什么类型的指针,都是用来保存地址的整数。

使用

int main() {
    void* ptr = nullptr;
}

表示不在乎类型的空指针,我们无法对空指针进行读取和写入

int main() {
    int var = 8;
    void* ptr = &var;
}

用&符号取得var的地址,并赋给ptr
对程序进行Debug,可以得到var的值为8ptr的的值是0xfd183ffcc4,本文使用的clion,在memory中输入,可以被带到内存区域。

总结来说,它本身不保存所谓变量的数字,指针就是一个保存地址的数,仅此而已

解引用

在指针前增加*可以进行解引用。

int main() {
    int var = 8;
    void* ptr = &var;
    *ptr = 10;
}

上述代码有错误,因为将10赋值给*ptr后,内存不知道该分配多少字节,是4?还是8?……
这时候就需要类型了,用来告诉编译器,他需要多少字节

int main() {
    int var = 8;
    int* ptr = &var;
    *ptr = 10;
    std::cout << var << std::endl; // 结果为10
}


可以看到编程0a,0a是十六进制的10

堆上创建

int main() {
    char* buffer = new char[8];
    //对指针进行操作

    delete[] buffer;
}


  1. 我们知道char是1byte,上面这句话是告诉编译器,给我分配8个字节的内存,
  2. 与此同时,返回了一个叫buffer的指针指向那块内存的开始位置
  3. 在最后,我们需要使用delete[] buffer来删除指针。

指针的指针

int main() {
    char* buffer = new char[8];

    char** ptr = &buffer;


    delete[] buffer;
    std::cin.get();
}

简单来说指针的指针,就是定义一个新的指针,用来指向指针的地址。

标签:cherno,int,C++,buffer,var,main,ptr,指针
From: https://www.cnblogs.com/jackjie/p/17035065.html

相关文章

  • C++实现双向链表的相关操作代码
    #include<iostream>#include<cstdlib>usingnamespacestd;#defineOK1#defineERROR0#defineMAXSIZE100typedefintElemtype;typedefintStatus;typedefstructDuL......
  • c++ vector容器总结
    vector1.动态扩展:并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间。(一般会找比预料更多的空间)2.vector容器构造1.构造vector​​<int>......
  • C语言学习--常量指针与指针常量
    指针常量#include<stdio.h>#include<string.h>//常量指针:是一个指针,定义不用初始化,能改变指向,但是指向的内容不能被修改constint*p;//指针常量:是一个常量,这......
  • C语言学习--指针函数与函数指针
       #include<stdio.h>#include<string.h>//指针函数:是一个函数,但是这个函数的返回值类型是一个指针//函数指针:是一个指针,这个指针的指向是一个函数//下面......
  • c++使用接口,通过纯虚函数实现
    #include<iostream>usingnamespacestd;classShape{protected:intwidth;intheight;stringname;public://purevirtialfunctionfori......
  • C++核心知识回顾(函数&参数、异常、动态分配)
    复习C++的核心知识函数与参数传值参数、模板函数、引用参数、常量引用参数传值参数intabc(inta,intb,intc){returna+b*c;}a、b、c是函数abc的形参,下......
  • c++ virtual关键字学习
    virtual在类中使用如在多继承中(环状继承):classD{......};classB:publicD{......};classA:publicD{......};classC:publicB,publicA{.....};这个继承......
  • C++ - 多线程
    1.多线程传统的C++(C++11之前)中并没有引入线程这个概念,在C++11出来之前,如果我们想要在C++中实现多线程,需要借助操作系统平台提供的API,比如Linux的<pthread.h>,或者windows下......
  • [C++/Java/Py/C#/Ruby/Swift/Go/Scala/Kotlin/Rust/PHP/TS/Elixir/Dart/Racket/Erlang
    目录题解地址代码cppjavapython3C#rubyswiftgolangscalakotlinrustphptypescriptelixirdartracketerlang题解地址https://leetcode.cn/problems/counting-words-with-a-g......
  • C++初探索
    C++初探索前言C++和C的区别主要在8个方面:输入和输出引用inline函数函数默认值函数重载模板函数new和deletenamespace我仅对印象不深的地方做了总结。......