在运用指针时,最多的错误就是指针的初始化。在程序中,一个未初始化的指针将会引起意想不到的问题。所以将指针初始化为NULL是个好习惯;在运用指针时,首先判断指针是否初始化,以防止指针指向一个未定义的地址。今天在写2.6内核的驱动时,就犯了这个问题。

 1 #include <linux/module.h>
 2 #include <linux/kernel.h>
 3 #include <linux/fs.h>
 4 #include <linux/cdev.h>
 5
 6 static struct cdev *my_dev;
 7 static dev_t *ndev;
 8
 9 static int my_open(struct inode *inode, struct file *file)
10 {
11     return 0;
12 }
13
14 static struct file_operations my_fops = {
15     .owner = THIS_MODULE,
16     .open  = my_open,
17 };
18
19 static int my_init(void)
20 {
21     int ret;
22     my_dev = cdev_alloc();
23     cdev_init(my_dev, &my_fops);
24     ret = alloc_chrdev_region(ndev, 0, 1, "mydev");
25     if (ret < 0){
26         printk("alloc_chrdev_region err!\n");
27         return ret;
28     }
29     ret = cdev_add(my_dev, ndev, 1);
30     if (ret < 0){
31         printk("cdev_add err!\n");
32         return ret;
33     }
34     printk("my_init success!\n");
35     return 0;
36 }
37
38 static void my_exit(void)
39 {
40     cdev_del(my_dev);
41     unregister_chrdev_region(ndev, 1);
42 }
43
44 module_init(my_init);
45 module_exit(my_exit);
46
47 MODULE_LICENSE("Dual BSD/GPL");

static struct cdev *my_dev;
static dev_t *ndev;

在程序中用指针的地方就可以直接写变量名,如:

void cdev_init(struct cdev *dev, struct file_operations *fops);

my_dev = cdev_alloc();

cdev_init(my_dev, &my_fops);   //这样用的前提是my_dev已被初始化,即上一条my_dev = cdev_alloc();对其进行了初始化

若定义如:static struct cdev my_dev;
     static dev_t ndev;    则应如下:

cdev_init(&my_dev, &my_fops);

所以当指针在运用前不能被初始经时,就不应将其定义为指针,比如在这个程序中:

static struct file_operations my_fops = {
 .owner = THIS_MODULE, 
 .open  = my_open,
};

就不能定义为:static struct file_operations *my_fops,因为当定义为指针时,程序中没有语句能对其进行初始化,使用这个未初始化指针是危险的。

若要用指针指向这个结构则应再定义一个指针变量,指向这个结构,再运用这个指针,如下:

struct file_operations *fops;

fops = &my_fops;

  

转载于:https://www.cnblogs.com/lucheng/archive/2012/12/23/2830296.html

驱动中的C语言----指针与指针初使化相关推荐

  1. 关于C语言中的数组指针、指针数组以及二级指针

    概念解释 数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针:在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道.数组指针指向的是数组中的一个具体元素,而不是整个数组,所 ...

  2. 在Swift中使用C语言的指针

    点击上方蓝字关注我,了解更多咨询 Objective-C和C语言经常需要使用到指针.Swift中的数据类型由于良好的设计,使其可以和基于指针的C语言API无缝混用.同时 Swift也可以自动处理大多数 ...

  3. C语言中的指针应用,函数指针,指针函数,结构体中定义函数指针。

    指针函数 指针函数就是一个返回指针的函数,其本质是一个函数,该函数的返回值是一个指针. 声明一个指针函数 int* fun(int x,int y); 例子 typedef struct _Data{ ...

  4. c语言用指针分离字符串数字与字符,c语言实验报告,指针的应用分别输出字符串中的数字和其他字符(共10篇).docx...

    c语言实验报告,指针的应用分别输出字符串中的数字和其他字符(共10篇) C语言程序设计实验报告 1实验目的 ⑴掌握指针的概念,会定义和使用指针变量: ⑵能正确使用变量的指针和指向变量的指针变量: ⑶能 ...

  5. c语言指针常量和常量指针,详解C语言中的常量指针和指针常量

    概述对于新手来说,指针在c语言里总是一个非常难以理解的概念.在这篇文章中,我们将解释常量指针,指针常量,const pointer to const(ps:楼主以为这可以翻译成指向常量的常量指针)的区 ...

  6. 图解C语言中数组指针、指针数组、函数指针、函数指针数组、指向函数指针数组的指针

    关于C语言中数组指针.函数指针.指针数组.函数指针数组.指向函数指针数组的指针一直比较绕,稍微整理一下. 到底是指针还是数组? 其实到底是指针还是数组还是看变量名与[]先结合还是*先结合.我们知道C语 ...

  7. c语言多维指针,C语言中多维数组和多维数组指针的应用

    最近开始好好学习编写CFD程序了,由于计算过程中所涉及的网格节点较多(一维最容易,二维就比较麻烦了,三维的还没有尝试自己动手编程呢),每个节点上都有若干个参数,包括速度,压力,温度,密度等,并且这些参 ...

  8. c语言链表中何时用点何时用箭头,C语言指针五——指针应用:链表

    C语言指针五--指针应用:链表 --从代码猜测作者的意图毕竟是一件痛苦的事,这也是为什么许多人接手别人的项目宁愿从头做起也不愿意使用现有代码的原因. 链表是一种重要的数据结构,它是许多其他数组结构的和 ...

  9. c语言中二维数组中维数的计算,数组指针字符串C语言程序设计-第4章.ppt

    <数组指针字符串C语言程序设计-第4章.ppt>由会员分享,可在线阅读,更多相关<数组指针字符串C语言程序设计-第4章.ppt(132页珍藏版)>请在人人文库网上搜索. 1.程 ...

最新文章

  1. javascript-行间样式,提取行间事件,while/for,全选/反选/取消,选项卡,innerHTML
  2. python需要php吗-python可以代替php吗
  3. python+html语音人物交互_使用Python读取HTML表并与之交互
  4. 记一次ubuntu误操作导致无法用sudo
  5. day③:函数式编程
  6. 20-21-2网络管理quiz5
  7. 【TO DO!】二分查找各种情况大总结
  8. 傅里叶变换公式及其推导【超详细!】
  9. 非线性光纤光学——光孤子
  10. HDU 5294 - Tricks Device(最短路+最小割)
  11. layui 借助 parseData 回调函数解析table 组件所规定的数据格式
  12. 【Windows系统笔记】打造一个适合自己的windows系统
  13. automagica 调用windows画图以及登录qq
  14. YourBatman表白了,在Java 27岁生日这天
  15. Java面向对象期末备考
  16. 【优化充电】基于matlab遗传算法求解电动汽车充电统一管理优化问题(含负荷功率曲线对比图及充电计划)【含Matlab源码 2300期】
  17. 主板的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. Nginx正向代理与Client设置代理上网
  19. Cocos2d-JS 目录结构
  20. 警报:遇见这类大数据培训课程赶紧撤,不要再让悲剧重复上演

热门文章

  1. Windows 7有用的20条新功能及技巧
  2. 图文解说:Discuz论坛基础设置第一弹
  3. WCF我应该再深入一些
  4. JBOSS 5.0.0GA的集群搭建
  5. [Java] 蓝桥杯BASIC-16 基础练习 分解质因数
  6. 蓝桥杯 ALGO-150 算法训练 6-1 递归求二项式系数值
  7. 【iOS开发】关于Xcode8后产生的viewForHeaderInSection、viewForFooterInSection设置不产生效果的问题
  8. POJ-2488 A Knights Journey-深度优先搜索DFS
  9. 【数据库原理】滨江学院姜青山 期末试卷知识点笔记整理 南京信息工程大学
  10. PRIMARY KEY 与 UNIQUE