对linux内指针的思考

struct cdev *p;
struct cdev *new = null;

指针的作用就是指向一个地址,所以基于这个基本前提就有如下推断

  • 此时p指针是有一个内存地址存放p指向的地址的

  • 但是由于p没有初始化,所以p的内存空间存储的地址是个野指针

  • 同理,此时new也是有一个内存区域存储他指向的地址,

  • new已经初始化为null,所以new指向null,也就是地址0,作为防御性编程

  • new指向的就是已知的地址,而p就是未知的野指针,容易引起内核崩溃


    对于struct cdev*p;这个语句来说,比如说定义了有这个地址0x80000000是存储这个指针本来的地址,以及0x91231234是这个指针目前存储的野指针,对于new来说是0;那么可以得到以下的结论:

    • 指针p的值是0x91231234,因为本质上p指针也是个变量,不过是个指针变量而已,这个指针变量专门用来指向内存地址
    • &p是0x80000000是创建这个指针变量的时候,为这个指针申请的内存地址,存储这个指针。也就是这个指针本身的地址在0x80000000,而这个地址存储的数据就是指向的地址,也就是0x91231234;需要明白内存有地址线和数据线,很明显,这个0x91231234就是放在0x80000000地址指向的数据线里。
    • 当需要修改p所要指向的内存的时候,需要使用&p作为函数参数进行传递,可以理解一下双指针参数
    • *p就是p指针指向的地址0x91231234存储的数据线中的内容,比如p = inode->i_cdev;那么此时 *p指向的就是cdev结构体变量。
posted @ 2026-05-15 14:25  太菜不摆  阅读(18)  评论(0)    收藏  举报