社区
C语言
帖子详情
C区高手在那里 C语言 如何不开辟数组让几个不同类型变量开辟连续存储单元
zhanghaowow
2011-12-08 05:26:38
这个问题是我们目前设备遇到的问题,急求解决办法,,,,,,(& *)
由于是不同类型所以自然是不能开数组了.
这个问题我首先想到是集合类,但是C好像是没有这个内型,在一想集合类好像存储的是指针,开辟的也不是连续内存单元啊.
C 区有没有哪个高手有什么办法能解决这个问题. 同事弄的汇编里面好像有办法处理这个问题.
C 区高手在那里?
...全文
180
19
打赏
收藏
C区高手在那里 C语言 如何不开辟数组让几个不同类型变量开辟连续存储单元
这个问题是我们目前设备遇到的问题,急求解决办法,,,,,,(& *) 由于是不同类型所以自然是不能开数组了. 这个问题我首先想到是集合类,但是C好像是没有这个内型,在一想集合类好像存储的是指针,开辟的也不是连续内存单元啊. C 区有没有哪个高手有什么办法能解决这个问题. 同事弄的汇编里面好像有办法处理这个问题. C 区高手在那里?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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 一直支持,只是写法不同。
珍惜生命远离CPP
2011-12-09
打赏
举报
回复
[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
打赏
举报
回复
指针,强制类型转换
珍惜生命远离CPP
2011-12-08
打赏
举报
回复
struct
然后 1字节 对齐
C语言
系列之
数组
与算法实战
尹成老师带你步入 C 语言的殿堂,讲课生动风趣、深入浅出,全套视频内容充实,整个教程以 C 语言为核心,完整精彩的演练了数据结构、算法、设计模式、数据库、大数据高并发检索、文件重定向、多线程同步、进程通讯、黑客劫持技术、网络安全、加密解密,以及各种精彩的小项目等,非常适合大家学习!
【
C语言
】
C语言
数组
篇(一定要深度理解
数组
和熟练使用
数组
~)
数组
是由数据
类型
相同的一系列元素组成的。需要使用
数组
时,通过声明
数组
告诉编译器
数组
中内含多少元素和这些元素的
类型
。编译器根据这些信息正确的创建
数组
。普通
变量
可以使用的
类型
,
数组
元素都可以使用。变长
数组
实际上就是
数组
[]里可以放
变量
表达式,在Linux环境下gcc可以使用,不过要注意的是,这样创建一个
数组
是不能初始化的。当然支持C99标准的编译器底下也可以这样使用。
数组
的灵活运用可以高效地解决一些比较困难的问题,它可以很好地训练我们的编程思维。
C语言
指针引用
数组
前言:
C语言
中指针玩的是什么,是内存,要想学好指针的小伙伴们要先对数据在内存中是怎么玩的做一番了解~ 当在程序中定义一个
变量
时,系统会根据其数据
类型
为其
开辟
内存空间,例如Visual C++为整型
变量
分配四个字节的空间,为单精度浮点型
变量
分配四个字节,为字符型
变量
分配一个字节,内存中每个字节都有自己独立且唯一的一个编号,这就是地址 ,如下图,系统为
变量
i分配了2000~2004的
存储单元
。 _访问
变量
的方式_有如下图.
C语言
动态
数组
搭建
二维动态
数组
的搭建与一维动态
数组
的搭建类似,下面举一个例子。输入班级数学生数并进行计算总的平均分。
C语言
入门系列 - 构造数据
类型
--
数组
C语言
入门系列 - 构造数据
类型
--
数组
。一维
数组
。
数组
赋值,访问。
数组
初始化。二维
数组
。二维
数组
初始化。二维
数组
的访问操作
C语言
69,336
社区成员
243,078
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章