значения хранятся в структуре - PullRequest
0 голосов
/ 20 октября 2011

Я новичок в языке Си. У меня есть несколько вопросов относительно структур.

Например:

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 является структурным типом?

Спасибо.

1 Ответ

1 голос
/ 20 октября 2011

Возвращение void* не означает возврата указателя void. Это значит вернуть указатель на любой тип .
Фактически, указатели хранят адреса, а адреса всегда имеют одинаковый размер, независимо от того, какой тип находится позади.

Тем не менее, вы должны иметь приведение к struct mmc_davinci_host * после вызова mmc_priv. Я бы написал так:

/* 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);
...