【问题标题】:values store in struct值存储在结构中
【发布时间】:2011-10-20 07:35:00
【问题描述】:

我是 C 语言的新手。我有一些关于结构的问题要问。

例如:

static inline void *mmc_priv(struct mmc_host *host)
{        
     return (void *)host->private;
}

struct mmc_host 
{
    unsigned long private[0] ____cacheline_aligned;
};


struct mmc_davinci_host *host = NULL;
struct mmc_host *mmc = NULL;

host = mmc_priv(mmc);
host->mmc = mmc;

*struct mmc_davinci_host请参考本站http://lxr.free-electrons.com/source/drivers/mmc/host/davinci_mmc.c#L167*

函数mmc_priv() 返回一个空指针。那么,host 将返回的地址存储在哪里,因为host 是一个结构类型?

谢谢。

【问题讨论】:

    标签: c kernel embedded-linux void void-pointers


    【解决方案1】:

    返回 void* 并不意味着返回 void 指针。这意味着返回指向任何类型的指针
    其实指针是存放地址的,地址总是一样大小的,不管后面是哪个类型。

    但是,在调用mmc_priv 之后,您应该有一个转换为struct mmc_davinci_host *。我会这样写:

    /* call mmc_priv and store its result in host, after having cast it to struct mmc_davinci_host * */
    host = (struct mmc_davinci_host *) mmc_priv(mmc);
    

    【讨论】:

    • 是的。我知道void* 可以转换为任何类型。但是由于结构有自己声明的成员。地址存储在哪里?它在struct 的第一个字节吗? ?
    • host 是一个指针,而不是直接的struct。它指向成员所在的struct
    • okkk。我已经明白了。我想念那个主机是一个指针。Thamk 指出来。你有什么好的电子书/网站来学习高级 C 吗?
    • @spaceboy:有关电子书列表,请参阅 this link on SOthis link on SO 以获取 C 编程书籍
    • void* 的转换可以隐式完成;演员表是不必要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 2012-11-25
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多