c - 值存储在结构中

标签 c kernel embedded-linux void void-pointers

我是 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()返回一个void指针。那么,由于 host 是结构体类型,所以 host 将返回的地址存储在哪里呢?

谢谢。

最佳答案

返回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);

关于c - 值存储在结构中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7832551/

相关文章:

C 编程 - execlp() 有帮助吗?

c - 错误: expected expression in else if statement

linux - Linux 内核中的主要页面错误处理程序

linux - lib32-ncurses 没有安装到 rootfs

linux - 关闭或停止Linux中的不同设备

linux - 什么是目标上的交叉编译或调试?

c++ - 将 LPSTR 转换为 LPCTSTR

c - 在 UDP 上流式传输

c - 如何在 Windows 的文件系统驱动程序中查找 PNP 设备 ID

windows - nt!KiSystemCall64 中的断点设置不起作用