почему указатель malloc (sizeof ())работает?

Этот следующий код отлично работает:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    struct node{
        int a, b, c, d, e;
    };
    struct node *ptr = NULL;
    printf("Size of pointer ptr is %lu bytes\n",sizeof (ptr));
    printf("Size of struct node is %lu bytes\n",sizeof (struct node));
    ptr = (struct node*)malloc(sizeof (ptr));               //Line 1
//    ptr = (struct node*)malloc(sizeof (struct node));    //Line 2

    ptr->a = 1; ptr->b = 2; ptr->c = 3; ptr->d = 4; ptr->e = 5;
    printf("a: %d, b: %d, c: %d, d: %d, e: %d\n",
            ptr->a,ptr->b,ptr->c,ptr->d,ptr->e);
    return 0;
}

При соблюдении:

gcc -Wall file.c

Мой вопрос: :, почему это нормально?

mallocвыделяет количество байтов, указанное в его аргументе. Здесь sizeof ptr— это 8 байт на моей 64-битной -Linux-машине. Я думал, что mallocпредоставит 8 байтов, но как тогда он получает доступ ко всем переменным a,b,c,d,e? Это только с gcc или я что-то упустил со стандартным C?

Насколько я знаю, «Линия 2» должна быть там вместо «Линии 1», но любая из строк работает нормально. Почему?

8
задан pb2q 2 August 2012 в 20:51
поделиться