Я новичок здесь и я новичок в программировании. Я изучаю структуры, указатели и функции и как они все работают вместе в C. Я пытаюсь понять результаты, которые я получаю для следующего кода:
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
typedef struct {
int* data;
unsigned int len;
} intarr_t;
intarr_t* intarr_create( unsigned int len )
{
intarr_t* parr= malloc(sizeof(intarr_t));
parr->data= malloc(len*sizeof(int));
parr->len= len;
if (parr->data && parr)
return parr;
else
return NULL;
}
int main()
{
intarr_t* p = intarr_create(3); //creat a typedef struct "intarr_t" with data pointer that has 3 integer values allocate to it.
printf("%ld %ld %ld %ld %ld %ld %ld\n",sizeof(p), sizeof(*p), sizeof(*(p->data)), sizeof(p->data), sizeof(*(&(p->data))), sizeof(&(p->data)), sizeof(p->data[0]));
printf("%p %p %p %p %p\n", (void*)p, (void*)p->data, (void*)&(p->len), (void*)&(p->data), (void*)&(p->data[0]));
intarr_destroy(p);
}
Я получаю тот же вывод для того, что я всегда устанавливал для "len".
8 16 4 8 8 8 4
0x55f672e0c260 0x55f672e0c280 0x55f672e0c268 0x55f672e0c260 0x55f672e0c280
Может кто-нибудь объяснить, пожалуйста, каждый из результатов и соответствующую часть из кода? какой из них ссылается на указатель, указатель на данные и значения в данных, разыменование каждого из них? почему размеры являются тем, чем они являются? Почему размер данных адреса изменяется в каждой опции и почему не меняются, когда я изменяю размер элементов (len)?
Этот код, который я построил, заставил меня больше запутаться в целом, что есть что и как отличать понятия от других.
Извините за грязный длинный вопрос. Опять же, это мое первое, так что будьте милы с вашей критикой и будьте внимательны с вашим ответом. Спасибо.