免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: todayrw
打印 上一主题 下一主题

支持两个globalmem设备的globalmem驱动 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-04-15 16:21 |只看该作者
int *a;  a是指针变量,存放着地址
int a[];  a是数组名,但数组名a也代表数组首元素的地址,那么a能够正确引用为一个指针变量,即a指向数组a[]的首元素,就是说:int *a;那么一旦它指向一个int型数组,则数组名也可以是a,引用数组a的元素可以用a[0],&a[0]就表示第一个单元里的int型数据所在的地址。

所以,我们得到结论,定义一个指针变量,一旦它指向一个数组的首元素,那么首元素的地址可以用&指针变量名[0]来表达;第n个元素的地址可以用&指针变量名[n-1]来表达。

但是有一个问题,在int a[]后,没有指明几个单元内容,内存怎么分配?这种写法是否错误??
经检验,编译错误
那就是说只能把int *a;看作是int a[];现实中不能这么写


编一个例子,验证一下
#include "stdio.h"

int main()
{
        char *a="i love you!";
        printf("a[0]=%c a[1]=%c a[2]=%c\n",a[0],a[1],a[2]);
        printf("a=%x &a[0]=%x &a[2]=%x\n",a,&a[0],&a[2]);
}
编译,运行:
a[0]=i a[1]=  a[2]=l
a=80484b0 &a[0]=80484b0 &a[2]=80484b2

这里要强调的是:C语言中没有字符串变量,字符串常量的保存是通过字符数组来实现的。所以指针a指向的是一个字符数组。

所以:
struct globalmem_dev *globalmem_devp; /*设备结构体指针*/


struct globalmem_dev  globalmem_devp[]; 等价。

所以就有了:
globalmem_setup_cdev(&globalmem_devp[0], 0);  
globalmem_setup_cdev(&globalmem_devp[1], 1);

评分

参与人数 1可用积分 +15 收起 理由
T-bagwell + 15 我很赞同

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP