2013-09-25 3 views
0

В настоящее время я создаю массив структур, и когда я инициализирую массив, он начинается с 8 элементов в структуре, а не 1. Почему он это делает? Если больше кода необходимо (но я сомневаюсь в этом, как они все Seperate функции, я могу разместить его, если просили) Это соответствующие биты кода:Создание массива структур, создающих для большого массива, C

typedef struct { 
     int valid; 
     int row, col; 
} Point; 

typedef struct { 
     Point point; 
     int number; 
     char name; 
     char param[20]; 
     char type[20]; 
} Agent; 





int main(int argc, char **argv) 
{ 
     int steps; 
     int listSize = 0; 

     Agent *agentList = (Agent *) calloc(1, sizeof(Agent)); 
     printf("%d size of agentList when initialised\n", sizeof(agentList)); 
     if (argc != 4) { 
       error(SHOW_USAGE); 
     } 

     sscanf(argv[2], "%d", &steps); 
     if ((steps < 1)) { 
       error(BAD_STEPS); 
     } 

     readMap(argv[1]); 
     agentList = readAgentFile(argv[3], agentList); 
     print_agents(agentList); 
     return 0; 

ответ

1
printf("%d size of agentList when initialised\n", sizeof(agentList)); 

Это даст вам размер agentListуказателя, который, скорее всего, будет четыре или восемь в современных системах.

Точно так же, sizeof(*agentList) просто даст вам размер структуры, на которую указывает agentList но это одного элемент массива, а не весь массив.

Невозможно получить указатель на размер массива , указав на него просто потому, что указатель указывает на одну вещь, а не массив. Под этим я имею в виду это может хорошо указывать на первый элемент массива, но это не то же самое, что указывать на массив. Различие тонкое, но важное.

Если вы хотите узнать размер массива, где единственное, что у вас есть, это указатель на него, вам придется запомнить его отдельно.

1

Это здесь не дает вам размер самого массив, но дает вам размер указателя:

printf("%d size of agentList when initialised\n", sizeof(agentList)); 

это не представляется возможным определить размер массива из указателя, вы должны хранить размер массива отдельно и носить его с массивом.

Вот почему вы заметите, что многие функции в C будут иметь как указатель, так и аргумент размера.

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