[英]Creating an array of structs, creating to large of an array, C
我正在創建一個結構數組,當我初始化數組時,它從結構中的8個元素開始,而不是1.它為什么這樣做? 如果需要更多的代碼(但我懷疑它,因為它們都是單獨的函數,如果被問到我可以發布它)這是代碼的相關部分:
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;
這里沒有給你數組的大小,但給你指針的大小:
printf("%d size of agentList when initialised\n", sizeof(agentList));
無法從指針確定數組的大小,您需要單獨存儲數組的大小並隨陣列一起攜帶。
這就是為什么你會注意到C中的許多函數都有指針和大小參數。
printf("%d size of agentList when initialised\n", sizeof(agentList));
這將為您提供agentList
指針的大小,該指針很可能在當前系統中為4或8。
類似地, sizeof(*agentList)
將簡單地給出agentList
指向的結構的大小,但這是數組的單個元素而不是整個數組。
沒有辦法從指針指向它所指向的數組的大小,只是因為指針指向一個單獨的東西,而不是一個數組。 通過這個,我的意思是它可能指向數組的第一個元素,但這與指向數組不同。 區別是微妙但重要的。
如果你想知道一個數組的大小,你唯一擁有的就是指向它的指針,你必須單獨記住它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.