![](/img/trans.png)
[英]Questions about register_chrdev_region() in linux device driver
[英]the use of double pointer (type **)ptr in __register_chrdev_region (linux kernel, 4.14.13, x86_64)
在linux內核(4.14.13,x86_64)中,函數[__register_chrdev_region()][1]聲明了一個雙指針變量struct char_device_struct **cp;
然而,在整個函數中, cp
的值從未被直接使用,它總是像這樣使用: *cp
。 我不明白這里的意思,為什么不定義一個像: struct char_device_struct *cp
這樣的指針,然后使用像cp
這樣的變量。 更清楚地說,例如,如果變量已定義為: struct char_device_struct *cp
,則該函數中的以下代碼段:
for (cp = &chrdevs[i]; *cp; cp = &(*cp)->next)
if ((*cp)->major > major ||
((*cp)->major == major &&
(((*cp)->baseminor >= baseminor) ||
((*cp)->baseminor + (*cp)->minorct > baseminor))))
break;
可以這樣寫:
for (cp = chrdevs[i]; cp; cp = (*cp)->next)
if ((cp)->major > major ||
((cp)->major == major &&
(((cp)->baseminor >= baseminor) ||
((cp)->baseminor + (cp)->minorct > baseminor))))
break;
所以我不知道為什么指針cp
被定義為雙指針: struct char_device_struct **cp
,那么它總是被它的“取消引用”形式*cp
? [1]: https : //elixir.bootlin.com/linux/v4.14.13/source/fs/char_dev.c#L100
因為下面的幾行有一個對*cp
的賦值:
cd->next = *cp;
*cp = cd;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.