размер оператора и структуры - PullRequest
1 голос
/ 17 августа 2011
struct s  
{  
    int i;  
    char * c;  
} *obj;
obj = malloc(sizeof(struct s));

Скажем, например, у нас есть структура, как определено выше (или любая структура в целом, я только что написал выше для примера).

Тогда, что лучше при использованииОператор sizeof

sizeof (struct s) или sizeof (* obj)?

Я предпочитаю первый, так как он имеет больше смысла для меня (ясно говорит нам, что мы выделяем память дляобъект структуры s)

Кроме того, использование второго может привести к логическим ошибкам (например, обычное «забывание разыменовать указатель»)

Может ли первое вызвать какие-либо проблемы?У меня еще не было проблем с этим, но я просто хотел узнать, правильно ли я делаю то, что я делаю.

Если да, то не могли бы вы привести пример того, где это может произойти?

Ответы [ 3 ]

7 голосов
/ 17 августа 2011

Что лучше при использовании оператора sizeof

sizeof (struct s) или sizeof (* obj)?

Это вопрос предпочтений.

Я предпочитаю sizeof(*obj). Если позже я изменю тип obj (скажем, struct s2), sizeof(struct s) будет устаревшим.

3 голосов
/ 17 августа 2011

Можно использовать .

sizeof(*obj) следует всегда использовать , потому что, если тип obj когда-либо изменится, это все равно будет работать. С sizeof(struct s) у вас будет скрытая ошибка.

0 голосов
/ 17 августа 2011

Я предпочитаю sizeof(struct s) несмотря на то, что если имя структуры изменится, код устарел. Моя философия заключается в том, что если структура изменится, лучше всего пересмотреть код, который ее использует, просто чтобы быть в безопасности.

...