• C语言06、指针


    指针是什么

    指针是内存中的一个最小单元的编号,也就是地址。平时说的指针通常指的是指针变量,用来存放内存地址的变量。地址唯一标识一块内存空间。

    指针其实就是地址。可以通过取地址取出变量的内存地址

    指针指向时,指针所存储的只是指向数据的首地址。

    1. #include
    2. int main()
    3. {
    4. int a = 10;//在内存中开辟一块空间
    5. int *p = &a;//这里我们对变量a,取出它的地址,可以使用&操作符。
    6.    //a变量占用4个字节的空间,这里是将a的4个字节的第一个字节的地址存放在p变量中,p就是一个之指针变量。
    7. return 0;
    8. }

    总结:指针变量,用来存放地址的变量。(存放在指针中的值都被当成地址处理)

    那么一个单元是多大呢?1个字节

    如何编址呢?

    指针有多大呢?32位平台下,指针的大小是4个字节,64位平台下,指针的大小是8个字节。

    指针类型

    指针类型有int*、char*、short*......

    指针类型的意义是什么呢?

    可以用来指向不同数据

    指针类型决定了对指针解引用的时候有多大权限(能操作几个字节)比如: char* 的指针解引用就只能访问一个字节,而 int* 的指针的解引用就能访问四个字节。比如: char* 的指针解引用就只能访问一个字节,而 int* 的指针的解引用就能访问四个字节。

    野指针

    野指针指的是一些指向位置不可知的指针(随机的、不正确的、没有明确限制的)

    野指针的成因:

    1.指针未初始化

    2.指针越界访问

    3.指针指向的空间释放

    做到这几点,规避野指针

    1.指针初始化

    2.小心指针越界

    3.指针指向空间释放即使其置为空

    4.避免返回局部变量的地址

    5.指针使用之前检查其有效性

    指针运算

    指针+-整数

    指针+-整数时会根据指针的类型来决定向前或向后走一步的距离有多大

    指针-指针

    同类型的指针减指针,得到的是指针间相差的元素个数

    不同类型的指针减指针会引发访问冲突,出现异常,所以只能用相同类型的指针-指针

    指针的关系运算

    指针间的比较大小实际上比较的是地址。

    标准规定:

    允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与
    指向第一个元素之前的那个内存位置的指针进行比较。

    二级指针

    1. int a = 10;
    2. int* pa = &a;//一个一级指针,指针指向a
    3. int **ppa = &pa;//一个二级指针,指针指向*pa这个一级指针

    指针数组

    指针数组的本质是数组,是存放指针的数组,数组的每个元素都是一个指针
    int* arr1 [ 10 ]; // 整形指针的数组
    char * arr2 [ 4 ]; // 一级字符指针的数组
    char ** arr3 [ 5 ]; // 二级字符指针的数组

    数组指针

    数组指针的本质是指针,是一个指向数组的指针

    下面代码哪个是数组指针?
    int * p1 [ 10 ];
    int ( * p2 )[ 10 ];
    //p1, p2 分别是什么?
    int ( * p )[ 10 ];
    // 解释: p 先和 * 结合,说明 p 是一个指针变量,然后指着指向的是一个大小为 10 个整型的数组。所以 p 是一个
    指针,指向一个数组,叫数组指针。
    // 这里要注意: [] 的优先级要高于 * 号的,所以必须加上()来保证 p 先和 * 结合。

    p1是指针数组,p2是数组指针

  • 相关阅读:
    在PHP8中向数组添加元素-PHP8知识详解
    笔记:在Entity Framework Core中使用乐观并发控制来处理数据更新的冲突
    (附源码)node.js自我展示博客网站 毕业设计 231547
    substring-after用法
    一文详解Web自动化测试
    电脑msvcr100.dll丢失的解决方法,找不到msvcr100.dll的修复方法分享
    nodejs+vue电影网站elementui
    这可能是最全的SpringBoot3新版本变化了!
    服务拆分(案例Demo)
    吃透这份“Java进阶核心手册”再战字节,直接把面试官按在地上摩擦
  • 原文地址:https://blog.csdn.net/weixin_60320290/article/details/126141237