C语言指针和动态内存分配问题

int*p;p=(int*)malloc(10*sizeof(int));如上分配动态内存后p是指向这片连续内存空间的头还是尾?还有对于结构体,如structstuden... int *p;
p=(int *)malloc(10*sizeof(int));

如上分配动态内存后
p是指向这片连续内存空间的头还是尾?

还有对于结构体,如
struct student
{
int num;

char[10] name;

}
那(struct student *)malloc(sizeof(struct student))会分配多少个字节?
展开
 我来答
爱说真话的小丑
推荐于2016-10-23 · TA获得超过943个赞
知道小有建树答主
回答量:866
采纳率:0%
帮助的人:288万
展开全部
如上分配动态内存后
p是指向这片连续内存空间的头还是尾?
是连续内存空间的头。
那(struct student *)malloc(sizeof(struct student))会分配多少个字节? 14 字节,如果4字节对齐(VC 默认的),则为16字节。
追问
14个字节怎么来的?如果说是结构体里面每个成员加起来的字节的话,可以理解(1个int+10个char)那么16个字节又是怎么来的?
追答
为了提高程序效率,系统往往会采取与系统等宽的对其方式,如 32 位系统,访问内存时,以 4 字节为单位,效率最高,所以 vs 默认4字节对齐(32位,暂时还没有 64 位)。14 字节不是 4 的整数被,所以 VS 默认给这个结构体分配 16 字节的内存。也可以在结构体前加上杂注:#pragma pack(1),强制以 1 字节对其,那么这个结构体的大小就是 14 字节。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式