标题:可以将一个数组强制转换成结构体么?
只看楼主
isbsssss
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2015-3-13
结帖率:0
已结贴  问题点数:10 回复次数:9 
可以将一个数组强制转换成结构体么?
typdef struct A{char b;long int c;) R;
char content[5];
(R) content[5];
可以不可以
搜索更多相关主题的帖子: content 结构体 
2015-03-13 14:23
风车转风车89
Rank: 2
等 级:论坛游民
帖 子:125
专家分:45
注 册:2014-9-15
得分:2 
不可以 他们属于不同类型暂用字节数目都不同
2015-03-13 15:36
afanihao
Rank: 2
等 级:论坛游民
威 望:1
帖 子:62
专家分:99
注 册:2015-3-13
得分:2 
struct A
{
   char b;
   long int c;
};
此struct在内存中占8字节,中间有填充。b占1个字节,中间空3个字节,c占4个字节。参考10章、及附录《VC2008调试方法》

书在这里 : http://www. 第10章,我说了这个问题,不过我不打算把这一章公布到网上,你就按我说的去操作一下吧。

以下是引用isbsssss在2015-3-13 14:23:53的发言:

typdef struct A{char b;long int c;) R;
char content[5];
(R) content[5];
可以不可以
2015-03-13 15:53
a63568339
Rank: 2
等 级:论坛游民
帖 子:9
专家分:26
注 册:2015-2-3
得分:2 
在c语言中应该不可以,要是在OC中就可以。
结构体中得得返回值类型就是数组类型

类人猿
2015-03-13 16:01
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:2 
程序代码:
#include <stdio.h>

int main(void)
{
    typedef struct A
    {
        char b;
        long int c;
    } R;
    R content;
    content.b = 'A';
    char *read = (char *)&content;
    printf("%c\n", read[0]);
    return 0;
}


但这种东西少用的好
2015-03-13 16:47
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
或者 我突然想到 你是不是需要union?
2015-03-13 16:48
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
得分:2 
啥玩意都可以强制转换成任何类型的指针,但是很危险,不了解内存布局就别用,甚至不同编译器,不同平台的实现方式也不一样,完全失去了代码的可移植性

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2015-03-13 16:50
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
得分:2 
在c++中有转换构造函数和类型转换函数,可以实现非标准类型的数据类型的转换

一片落叶掉进了回忆的流年。
2015-03-13 18:03
dreamofgod
Rank: 5Rank: 5
等 级:职业侠客
帖 子:194
专家分:341
注 册:2011-8-16
得分:2 
我蛮喜欢这个想法的 可以多一种算法

一个单片机就让我头疼不已~~~
2015-03-13 19:49
YOHO
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2020-7-22
得分:0 
回复 楼主 isbsssss
程序代码:
#include <stdio.h>
#include <stdlib.h>

typedef struct{
    int x;

}eg;

char database[32];

int main()
{
    eg *para = (eg*)database;
    printf("%d\n",sizeof(int));
    printf("%d\n",sizeof(char));
    printf("%x\n",&para[0]);
    printf("%x\n",&para[1]);
    printf("%x\n",&para[2]);
    printf("%x\n",&para[3]);
    printf("%x\n",&database[0]);
    printf("%x\n",&database[4]);
    printf("%x\n",&database[8]);
    printf("%x\n",&database[12]);

}


这样的代码中,char类型大小1字节,int类型大小4字节。强制类型转化后,实际就是在database数组的内存中按照结构体的内存设置再设置了一个结构体数组para。按照数组空间大小可以知道,现在database[32] 的内存实际就对应到了para[8],输出验证一下。如下图:
2020-07-22 16:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-442607-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024844 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved