结构体数据复制到数组到数组的映射有什么用

【图文】第八章 结构体 结构体数组、链表_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
第八章 结构体 结构体数组、链表
&&第八章 结构体 结构体数组、链表
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢帐号:密码:下次自动登录{url:/nForum/slist.json?uid=guest&root=list-section}{url:/nForum/nlist.json?uid=guest&root=list-section}
贴数:2&分页:slowaction发信人: slowaction (slowaction), 信区: CProgramming
标&&题: Re: 使用结构体和数组哪个效率高,假设都可以
发信站: 水木社区 (Mon Oct 20 09:54:54 2014), 站内 && 没有区别 && btw:写程序首先是可读性和可维护性, &&&& 逼不得已才进行影响可读性的优化 &&&&&&&&&& 一般的优化到不了这个地步 && 【 在 chinatongue (猫贼洞,猫在洞里做贼) 的大作中提到: 】
: 一组同类数据
&&&& -- && ※ 来源:·水木社区 newsmth.net·[FROM: 222.129.50.*]
slowaction发信人: slowaction (slowaction), 信区: CProgramming
标&&题: Re: 使用结构体和数组哪个效率高,假设都可以
发信站: 水木社区 (Mon Oct 20 12:19:43 2014), 站内 && 用结构体可能会比在内存中间排指针站的空间大一点 && 如果跨出一个cache line那就影响性能了 && 【 在 chinatongue (猫贼洞,猫在洞里做贼) 的大作中提到: 】
: 什么意思,能通俗解释下吗?
&&&& -- && ※ 来源:·水木社区 newsmth.net·[FROM: 222.129.50.*]
文章数:2&分页:3407人阅读
S1: C/C++(754)
s2: 软件Develop进阶(924)
s2: 软件设计/架构设计(36)
之前说过了, 数组的本质就是i到a[i]的映射, 下面, 我们看看更高级的映射---利用结构体数组。
心血来潮, 突然想写个代码风格比较好的程序, 欢迎大家找茬拍砖, 共同进步:
#include &iostream&
COLOR_STR_LEN
// 颜色字符串的最大长度
// 基本数据类型
typedef char SYS_INT8;
typedef int
SYS_INT32;
// 函数返回值状态
SYS_0K = 0,
SYS_ERROR = -1,
// 基本颜色种类
typedef enum
UNDEF = -1, // 未定义
GREEN = 1,
BLACK = 2,
YELLOW = 10,
WHITE = 15,
// 从枚举到字符串的映射
typedef struct
SYS_INT8 szColor[COLOR_STR_LEN + 1];
// 颜色映射的数组
ColorMap colMap[] =
{RED, "red"},
{GREEN, "green"},
{BLACK, "black"},
{YELLOW, "yellow"},
// 函数功能:根据颜色字符串, 查找对应的颜色值
SYS_INT32 getValueFromColorStr(Color *pcol, const SYS_INT8* pColor)
if(NULL == pcol && NULL == pColor)
printf("NULL pointer");
return SYS_ERROR;
SYS_INT32 size = sizeof(colMap) / sizeof(colMap[0]);
SYS_INT32 i = 0;
for(i = 0; i & i++)
if(0 == strcmp(pColor, colMap[i].szColor))
*pcol = colMap[i].
return SYS_0K;
printf("no match for %s\n", pColor);
return SYS_ERROR;
// 根据颜色值, 查找对应的颜色字符串
SYS_INT32 getStrFromColorValue(Color col, SYS_INT8* pBuf, SYS_INT32 bufSize)
if(NULL == pBuf)
printf("NULL pointer");
return SYS_ERROR;
if(bufSize &= 0)
printf("bufSize(%d) is invalid", bufSize);
return SYS_ERROR;
SYS_INT32 size = sizeof(colMap) / sizeof(colMap[0]);
SYS_INT32 i = 0;
for(i = 0; i & i++)
if(col == colMap[i].col)
strncpy(pBuf, colMap[i].szColor, bufSize - 1);
pBuf[bufSize - 1] = '\0';
return SYS_0K;
printf("no match for %d", (SYS_INT32)col);
return SYS_ERROR;
SYS_INT32 main()
// 根据颜色字符串, 查找对应的颜色值
SYS_INT32 iRet = SYS_ERROR;
Color col = UNDEF;
const SYS_INT8* pTest = "yellow";
iRet = getValueFromColorStr(&col, pTest);
if(SYS_0K != iRet)
printf("cannot find %s\n", pTest);
return SYS_ERROR;
cout && col &&
// 根据颜色值, 查找对应的颜色字符串
SYS_INT8 szColor[COLOR_STR_LEN + 1] = {0};
Color colTest = GREEN;
iRet = getStrFromColorValue(colTest, szColor, sizeof(szColor));
if(SYS_0K != iRet)
printf("cannot find %d", (SYS_INT32)colTest);
return SYS_ERROR;
cout && szColor &&
return SYS_0K;
欢迎大家七嘴八舌查看: 3716|回复: 5|关注: 0
结构体中多数组同时赋值问题
<h1 style="color:# 麦片财富积分
新手, 积分 5, 距离下一级还需 45 积分
Matlab中建一个结构体,我想将其中每个数组同时进行修改,我使用的方法是循环,见下例:
Test(1:n)=struct('abc',{zeros(6,6)});
& & Test(i).abc(2,:)=1;
因为这个步骤在我的程序中要做n多次,所以请问有没有效率更高的办法?非常感谢!
<h1 style="color:# 麦片财富积分
关注者: 1
回复 1# liuhuochenxiang 的帖子
帮你顶起来,跟着你学习一下。
<h1 style="color:#0 麦片财富积分
关注者: 3
s_inner=zeros(6,6);
s_inner(2,:)=1;
Test2(1:n)=struct('abc',{s_inner});
Test2(1).abc
& &&&0& &&&0& &&&0& &&&0& &&&0& &&&0
& &&&1& &&&1& &&&1& &&&1& &&&1& &&&1
& &&&0& &&&0& &&&0& &&&0& &&&0& &&&0
& &&&0& &&&0& &&&0& &&&0& &&&0& &&&0
& &&&0& &&&0& &&&0& &&&0& &&&0& &&&0
& &&&0& &&&0& &&&0& &&&0& &&&0& &&&0
<h1 style="color:# 麦片财富积分
可能是我没太说明白,我的意思是Test这个结构体本身就存在,其中也不止abc这一个数组,abc中不全是0且无规律。这样的条件下我要逐一修改1到n结构体中abc的同一行,有没有不用循环直接就能做的方法?非常感谢!
<h1 style="color:#0 麦片财富积分
关注者: 3
另外一个方法
Test3(1:3) = struct('abc',zeros(6,6));
Sa = randi(10,6,6);
Sb = randi(10,6,6);
Sc = randi(10,6,6);
[Test3.abc] = deal(Sa,Sb,Sc);
& &&&0& &&&0& &&&0& &&&0& &&&0& &&&0
& &&&0& &&&0& &&&0& &&&0& &&&0& &&&0
& &&&0& &&&0& &&&0& &&&0& &&&0& &&&0
& &&&0& &&&0& &&&0& &&&0& &&&0& &&&0
& &&&0& &&&0& &&&0& &&&0& &&&0& &&&0
& &&&0& &&&0& &&&0& &&&0& &&&0& &&&0
& &&&0& &&&0& &&&0& &&&0& &&&0& &&&0
& &&&0& &&&0& &&&0& &&&0& &&&0& &&&0
& &&&0& &&&0& &&&0& &&&0& &&&0& &&&0
& &&&0& &&&0& &&&0& &&&0& &&&0& &&&0
& &&&0& &&&0& &&&0& &&&0& &&&0& &&&0
& &&&0& &&&0& &&&0& &&&0& &&&0& &&&0
& &&&0& &&&0& &&&0& &&&0& &&&0& &&&0
& &&&0& &&&0& &&&0& &&&0& &&&0& &&&0
& &&&0& &&&0& &&&0& &&&0& &&&0& &&&0
& &&&0& &&&0& &&&0& &&&0& &&&0& &&&0
& &&&0& &&&0& &&&0& &&&0& &&&0& &&&0
& &&&0& &&&0& &&&0& &&&0& &&&0& &&&0
& &&&3& &&&9& &&&3& &&&5& &&&1& &&&4
& &&&4& &&&1& &&&5& &&&7& &&&9& &&&7
& &&&5& & 10& & 10& &&&7& & 10& &&&2
& &&&6& &&&8& &&&6& &&&4& &&&8& &&&8
& &&&1& &&&5& &&&6& &&&4& &&&1& &&&2
& &&&3& &&&6& &&&3& & 10& &&&3& &&&7
& &&&5& &&&7& & 10& &&&2& & 10& &&&1
& &&&8& &&&2& &&&7& &&&3& &&&8& &&&1
& &&&8& &&&1& &&&7& &&&9& &&&6& &&&6
& & 10& &&&8& &&&9& &&&1& &&&5& &&&1
& &&&9& &&&6& &&&9& &&&5& &&&1& &&&9
& &&&4& &&&5& &&&6& &&&2& &&&7& &&&9
& &&&8& &&&9& &&&2& &&&6& &&&1& &&&5
& &&&2& &&&5& &&&4& &&&5& & 10& &&&4
& &&&7& &&&5& &&&9& &&&7& &&&2& & 10
& &&&6& &&&9& &&&9& &&&7& &&&2& & 10
& & 10& &&&1& &&&1& &&&3& &&&4& &&&1
& &&&7& &&&2& &&&4& &&&5& &&&2& &&&8
<h1 style="color:# 麦片财富积分
本帖最后由 蔣神 于
02:00 编辑
array = zeros(6,6);
array(2, :) = 1;
[Test.abc] = deal(array);
站长推荐 /2
MATLAB大数据处理与探查
MATLAB中文论坛是全球最大的 MATLAB & Simulink 中文社区。用户免费注册会员后,即可下载代码,讨论问题,请教资深用户及结识书籍作者。立即注册加入我们吧!
MATLAB官方社交平台
MATLAB中文论坛微社区5被浏览344分享邀请回答#include &stdio.h&
#define LEN 100
struct array{
int a[LEN];
int a1[LEN],a2[LEN];
int main(){
for (int i = 0; i & LEN; ++i)
a1[i] = i;
*(struct array *)a2=*(struct array *)a1;
for (int i = 0; i & LEN; ++i)
printf("%d\n", a2[i]);
是这样的赋值吗02 条评论分享收藏感谢收起写回答

我要回帖

更多关于 结构体数组定义和使用 的文章

 

随机推荐