【c语言】如何用malloc开辟一块内存空间, 存不同的数据类型?

比如申请一块150字节的内存空间,如何做到前50字节的内存空间存int,中间50存float,后50存字符串?

不建议这么做。因为不同类型的数据所占字节数是不一样的,比如一个int可能占两字节,一个float占4字节...

我的建议就是,为每种数据分别申请内存。如果内存限制严重,可以考虑如下做法:

int total_len;
char* str;
int* num;
float* f_num;
void* mem;
total_len = 50 * sizeof(int) + 50 * sizeof(float) + 50 * sizeof(char);
mem = calloc(1, total_len);
num = mem;
f_num = mem + 50 * sizeof(int);
str = f_num + 50 * sizeof(float);

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-05-30
方法1:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *pMem = (char *)malloc(150);
memset(pMem, 0, 150);
int *pInt = (int *)pMem;
float *pFloat = (float *)(pMem+50);
char *pStr = pMem+100;

*pInt = 123456789;
*pFloat = 12.3456789;
strcpy(pStr, "S123456789");

printf("Int=%d Float=%f Str=%s \n", *pInt, *pFloat, pStr);
return 0;
}
方法2:
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
typedef struct tagMem
{
int iNum;
float fNum;
char szVal[64];
}Mem;
int main()
{

Mem *pMem = (Mem *)malloc(sizeof(Mem));
memset(pMem, 0, sizeof(Mem));

pMem->iNum = 123456789;
pMem->fNum = 12.3456789;
strcpy(pMem->szVal, "S123456789");

printf("Int=%d Float=%f Str=%s \n", pMem->iNum, pMem->fNum, pMem->szVal);
return 0;
}
输出结果为:Int=123456789 Float=12.345679 Str=S123456789

C语言关于MALLOC的用法
malloc是C语言中用于动态分配内存的一种方法。通过使用malloc,程序可以在运行过程中根据需求申请不同大小的内存空间。例如,表达式(char*)malloc(sizeof(char)*20)的作用是动态分配20个char类型的元素所占的内存空间,并将返回的指针强制类型转换为char类型的指针。这种操作使得程序在内存管理上更加灵活,可...

c语言,假设我现在准备用malloc函数为一个字符串开辟一个空间?
char *str=(char*)malloc(sizeof(char)*20);因为sizeof(char)就等于1。

c语言中malloc函数的用法
c语言中malloc函数的用法是动态内存分配函数。malloc函数是C语言中的一种动态内存分配函数。它可以在程序运行时动态地分配内存空间,使程序具有更大的灵活性和可扩展性。使用malloc函数可以在程序运行时动态地分配内存空间。例如,下面的代码片段可以申请一个大小为10个整形变量大小(即40个字节)的连续内存空间...

C语言中malloc函数的使用方法是什么?
C语言中malloc是动态内存分配函数。函数原型:void *malloc(unsigned int num_bytes);参数:num_bytes 是无符号整型,用于表示分配的字节数。返回值:如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。void* 表示未确定类型的指针,void *可以指向任何类型的数据...

C语言 malloc()函数 分配内存空间尺寸的问题
malloc是给指针变量分配内存空间的函数命令 正确使用:分配的空间要能保证容下你想存储的数据,不要和机器逗着玩(分配0空间,或少于自己实际需要的空间),如你上面的操作,表面上你程序运行没有问题,可实际上你占用了别人的地盘,只是当前你很幸运没有使程序出现问题,但不保证一定不出问题!!不再...

在C语言中如何使用malloc动态申请一维数组?
malloc()函数用来动态地分配内存空间,其原型为:void*malloc(size_tsize);描述:(参数描述)Size是以字节为单位分配的内存空间量。【功能描述】Malloc()在堆中分配指定大小的内存空间来保存数据。函数执行后,此内存空间未初始化,且其值未知。如果希望在分配内存的同时进行初始化,可以使用calloc...

C语言:动态内存函数:malloc的使用详解
malloc函数用于动态内存分配,其基本使用语法是:size_t malloc(size_t size);这里的size_t是一个无符号整型,代表你需要的内存空间大小,以字节为单位。malloc函数会返回一个void*类型的指针,指向分配到的内存起始位置。返回void*的原因在于函数并不知道将分配的内存用于何种数据类型,因此需要用户自行...

【C语言·数据结构】关于malloc和sizeof的用法
malloc用法:它是一个函数,原型是void *malloc(size_t size);前面提过了,就是分配size个字节的内存,然后返回指向这段内存首字节的指针,void* 表示未确定类型的指针,void *可以指向任何类型的数据,更明确的说是指申请内存空间时还不知道用户是用这段空间来存储什么类型的数据(比如是char还是int...

malloc函数怎么使用
malloc函数是C语言中用于动态内存分配的关键工具,其原型定义为extern void *malloc(unsigned int num_bytes);,并且需要包含头文件#include <stdlib.h>。该函数的主要功能是根据传入的字节数num_bytes,分配一块内存,如果分配成功,返回指向这块内存的指针;失败时返回NULL。使用完毕后,需用free()函数...

下午C语言课上讲的malloc到底怎么用啊,求解释
a=(char *)malloc(100*sizeof(char)); \/\/使用malloc函数分配一个内存的首地址,将这个地址给a,其 中100*sizeof(char)代表你要申请的内存的大小。a便是你获得的这块内存的首地址。在使用完这块内存之后,要记得使用free()函数来将内存释放掉。free(a); \/\/如果不释放,会引起内存泄露。具体...

相似回答