2013-09-25 128 views
0

我目前正在創建一個結構數組,並且當我初始化該數組時,它以結構中的8個元素開始,而不是1個。爲什麼是它這樣做?如果需要更多的代碼(但我對此表示懷疑,因爲他們都是獨立的功能,我可以將它張貼如果問) 這是代碼的相關位:創建一個結構數組,創建一個數組,大小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中的許多函數都會有一個指針和一個大小參數。