C区高手在那里 C语言 如何不开辟数组让几个不同类型变量开辟连续存储单元

zhanghaowow 2011-12-08 05:26:38
这个问题是我们目前设备遇到的问题,急求解决办法,,,,,,(& *)

由于是不同类型所以自然是不能开数组了.

这个问题我首先想到是集合类,但是C好像是没有这个内型,在一想集合类好像存储的是指针,开辟的也不是连续内存单元啊.


C 区有没有哪个高手有什么办法能解决这个问题. 同事弄的汇编里面好像有办法处理这个问题.

C 区高手在那里?
...全文
180 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
soarfish 2011-12-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 vilnies 的回复:]

A *pa;
B *pb;
C *pc;

void *p = malloc( sizeof(A) + sizeof(B) + sizeof(C)) ;

pa = (A*) p;
pb = (B*)( (char*)p + sizeof(A) );
pc = (C*)( (char*)p + sizeof(A) + sizeof(B) );
[/Quote]

支持
kakashi0309 2011-12-09
  • 打赏
  • 举报
回复
单字节对齐就可以啦~ 1楼都说了
「已注销」 2011-12-09
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 akirya 的回复:]

引用 3 楼 zhanghaowow 的回复:

1楼讲具体点吧,2楼指针的话也不是连续内存单元啊.
强制内型转换我也想到了,但是要把一个CHAR 转换成lang在开数组赋值,最后在转化回来,但是又考虑到精度,数据丢失问题.

VC GCC 都支持,但GCC需要新版
#pragma pack( push )
#pragma pack( 1 )
struct Test
{
in……
[/Quote]
GCC 一直支持,只是写法不同。

  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhanghaowow 的回复:]

1楼讲具体点吧,2楼指针的话也不是连续内存单元啊.
强制内型转换我也想到了,但是要把一个CHAR 转换成lang在开数组赋值,最后在转化回来,但是又考虑到精度,数据丢失问题.
[/Quote]
VC GCC 都支持,但GCC需要新版
#pragma pack( push )
#pragma pack( 1 )
struct Test
{
int i;
char c;
double d;
short s;
};
#pragma pack( pop )
jiutianc 2011-12-09
  • 打赏
  • 举报
回复
++,对其就不是很懂,详细说下[Quote=引用 1 楼 akirya 的回复:]

struct
然后 1字节 对齐
[/Quote]
elegant87 2011-12-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 vilnies 的回复:]

A *pa;
B *pb;
C *pc;

void *p = malloc( sizeof(A) + sizeof(B) + sizeof(C)) ;

pa = (A*) p;
pb = (B*)( (char*)p + sizeof(A) );
pc = (C*)( (char*)p + sizeof(A) + sizeof(B) );
[/Quote]

可以支持多种类型
根据不同类型的字节数进行存取
「已注销」 2011-12-09
  • 打赏
  • 举报
回复
看不懂楼主的意图。
linxren 2011-12-09
  • 打赏
  • 举报
回复
不大你得需求。
struct{
char type;
union{
char c;
int n;
double d;
}u;
}tab[10];

这样可以吗?
小默 2011-12-09
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 akirya 的回复:]
VC GCC 都支持,但GCC需要新版
#pragma pack( push )
#pragma pack( 1 )
struct Test
{
int i;
char c;
double d;
short s;
};
#pragma pack( pop )
[/Quote]
AnYidan 2011-12-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 akirya 的回复:]
struct
然后 1字节 对齐
[/Quote]

++

lz google struct

google 对齐
Snight 2011-12-08
  • 打赏
  • 举报
回复
结构体啊
机智的呆呆 2011-12-08
  • 打赏
  • 举报
回复
用汇编push到栈里,返回栈地址
qixing1115 2011-12-08
  • 打赏
  • 举报
回复
memcpy试试
txzsp 2011-12-08
  • 打赏
  • 举报
回复
可以尝试用C++的模板,或者也可以在C中用malloc()来开辟内存空间。
vilnies 2011-12-08
  • 打赏
  • 举报
回复
A *pa;
B *pb;
C *pc;

void *p = malloc( sizeof(A) + sizeof(B) + sizeof(C)) ;

pa = (A*) p;
pb = (B*)( (char*)p + sizeof(A) );
pc = (C*)( (char*)p + sizeof(A) + sizeof(B) );
一鸣惊人 2011-12-08
  • 打赏
  • 举报
回复
可以用内存偏移量实现吧 申请足够大的内存 计算偏移量
zhanghaowow 2011-12-08
  • 打赏
  • 举报
回复
1楼讲具体点吧,2楼指针的话也不是连续内存单元啊.
强制内型转换我也想到了,但是要把一个CHAR 转换成lang在开数组赋值,最后在转化回来,但是又考虑到精度,数据丢失问题.
shun_qizi_ran 2011-12-08
  • 打赏
  • 举报
回复
指针,强制类型转换
  • 打赏
  • 举报
回复
struct
然后 1字节 对齐

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧