【发布时间】:2017-11-09 15:39:01
【问题描述】:
我会尝试用一个例子来解释:
假设我想创建一个固定数字 3 的消息列表。
char* p_msglist[3];
此列表中的每条消息都应以固定大小存储(例如 16 个字符,因此每条消息在内存中保存 16 个字节,总共 48 个字节)。
char msg[16] = "first message";
char msg2[16] = "second message";
char msg3[16] = "third message";
在列表中指向这些消息中的每一个后,我打印了sizeof第一条消息和列表:
p_msglist[0] = msg;
p_msglist[1] = msg2;
p_msglist[2] = msg3;
printf("%lu\n", sizeof(msg));
printf("%lu\n", sizeof(p_msglist));
输出:
16 //size of msg is ok.
24
我知道一个 char 指针 包含 8 个字节,我们的消息列表用 3 个元素初始化,最后一行打印出 24。我想问:
有没有办法让我的列表包含
3*16=48字节。试图问:我可以确定我的列表在内存中包含 48 个字节吗?如果我想分配内存(
malloc等),我应该关心列表的指针和列表本身(24 字节 + 48 字节)吗?
提前致谢。
【问题讨论】:
-
如果存储在
p_msglist中的指针的目标总是与p_msglist相关联并且总是16 个字节,那么您可能需要一个多维数组(char p_msglist[3][16];)而不是一个指针数组。指针数组不关心它指向什么或谁管理该存储。 -
“我知道一个 char 指针包含 8 个字节”不,
char *可能是 8 个字节。它也经常是 4 个字节。或者它可以完全是别的东西。 -
是的,我也知道 :) 我的意思是,就我而言,它是 8 个字节。但你是对的,我应该写那个。