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))会分配多少个字节? 展开
p=(int *)malloc(10*sizeof(int));
如上分配动态内存后
p是指向这片连续内存空间的头还是尾?
还有对于结构体,如
struct student
{
int num;
char[10] name;
}
那(struct student *)malloc(sizeof(struct student))会分配多少个字节? 展开
1个回答
展开全部
如上分配动态内存后
p是指向这片连续内存空间的头还是尾?
是连续内存空间的头。
那(struct student *)malloc(sizeof(struct student))会分配多少个字节? 14 字节,如果4字节对齐(VC 默认的),则为16字节。
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 字节。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询