2013-04-23 4 views
-1
struct student_simple 
{ 
    int rollno; 
    char *name; 
}; 

разница междуРазница между SizeOf (STRUCT теге *) и SizeOf (STRUCT тег)

struct student_simple *s2 = malloc(sizeof(struct student_simple *)); 

struct student_simple *s3 = malloc(sizeof(struct student_simple)); 

я в состоянии использовать как s2 и s3 без каких-либо проблем, но когда я проверить размер в БГД

gdb$ p sizeof(struct student_simple) gives 16 

gdb$ p sizeof(struct student_simple *) gives 8 
+0

Вы понимаете, что мы можем видеть историю изменений каждого сообщения правильно? – RedX

+0

как удалить этот вопрос? –

+0

Вы не можете пометить его, чтобы закрыть его и ждать, пока кто-то это сделает. Или собрать (я думаю) 20000 репутацию, чтобы иметь возможность закрыть ее самостоятельно ;-) – RedX

ответ

1

Неопределенное поведение не определено. Все может случиться, включая появление правильного поведения. Используйте форму s3, это правильно.

2

В чем разница между [...] и [...]?

Знак со звездочкой. И если вы попытаетесь использовать s2 для хранения структуры student_simple, вы получите неопределенное поведение.

Как malloc размером 8 байт хранит структуру student_simple как в s2?

Не может. Как вы думаете, почему?

+0

@PriteshAcharya «Он просто сделал» не подразумевает ничего. Теперь это может сработать, завтра это не сработает. – 2013-04-23 06:07:54

1

sizeof(any_Structure_Pointer) предоставит 8 или 4, которые являются базами компиляторов. Но sizeof(YOUR_Structure) даст размер добавления всех типов данных, которые вы объявили внутри структуры.

Если у вас есть сомнения, уточните у sizeof(int*), sizeof(void*).... который даст 8 или 4 ..

2

sizeof(struct student_simple *) дает размер указателя на student_simple, но sizeof(struct student_simple) дает размер структуры переменной типа student_simple.

Смежные вопросы