Метод реализации указателя структуры - PullRequest
2 голосов
/ 18 января 2012
struct _Structure{
   int member;
};

Указатель структуры

Указатель на структуру

Есть ли разница между двумя приведенными выше фразами

ВНа мой взгляд, обе фразы представляют разные экземпляры указателя

Указатель структуры

typedef struct _Structure *SP;

SP sp;

Указатель на структуру

typedef struct _Structure PS;

PS *ps;

В отношении доступа к элементам данных _Structure оба имеют одинаковый код

sp->member;
    AND
ps->member

ЕСЛИ ОБА ФРАЗЫ ЖЕ, ОК НОПС !!!

Кроме того, зачем нам нужно

typedef struct _Structure *SP;

SP *sp;

//note: here 'sp' is like double pointer

Спасибо, Амит

Ответы [ 4 ]

1 голос
/ 18 января 2012

Если развернуть typedefs, оба типа sp и ps имеют тип struct _Structure *. В этом отношении между ними нет абсолютно никакой разницы.

Очевидно, что сами typedefs (SP и PS) имеют разную семантику, поскольку один является указателем, а другой - нет.

В последнем примере sp не , как двойной, это это двойной указатель. Двойные указатели полезны в некоторых контекстах, но используются реже, чем одиночные указатели.

0 голосов
/ 18 января 2012

На мой взгляд, обе фразы эквивалентны.Оба требуют реализации struct.Это всего лишь предпочтение программирования для typedef указателя и объявления его или объявления указателя на структуру.

0 голосов
/ 18 января 2012

Нет разницы и больше в

    typedef struct _Structure *SP;

SP *sp;

//note: here 'sp' is like double pointer

Тебе это не нужно. Если вы сделаете это, у вас будет только указатель на указатель, как вы сказали.

0 голосов
/ 18 января 2012

Нет разницы между двумя выражениями Указатель структуры и Указатель на структуру .

И нет никакой разницы между sp и ps переменными,Оба указателя на структуру.Использование * в typedef или в объявлении переменной не имеет значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...