结构体使用for循环赋值的问题

battle_boy 2008-05-11 01:41:37
使用typedef定义了这样一个结构体 moto_set
然后定义了一个指针*p指向这个结构体
我现在想用一个for循环给这个结构体赋值,第一次循环的时候,给moto_set第一个成员赋值,类推。。。
因为我要赋的值是存在一个数组里面的。
我想了一个结构大致是这样的
for(i=0;i<len(a[0]);i++)//a[0]存的是数组的长度
{
p=a[1];
p(这个地方p怎么操作才能指向下一个成员呢?)
}
...全文
1679 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
battle_boy 2008-05-11
  • 打赏
  • 举报
回复
呵呵
因为我的程序是使用在单片机上面的
之所以要用数组,是因为值最后是要存储到EEPROM中去的。


谢谢你的解答!
Treazy 2008-05-11
  • 打赏
  • 举报
回复
有些地方说明一下

>>如果非要用字节对齐,我给你看个代码

改成“如果非要用结构体内偏移,我给你看个代码”

另外
i<2
*(int *)((char *)p+i*sizeof(int)) = 1;
对应到你的程序
2<a[0]
*(int *)((char *)p+i*sizeof(int)) = a[i+1];


最后记得delete p

over 睡觉
Treazy 2008-05-11
  • 打赏
  • 举报
回复
只能说你设计的不够好

另外你如果想用结构体内找成员偏移地址的方法去循环赋值的话,

这就可能会牵涉到字节对齐的问题了

与其这样(容易出错,而且移植性不保证),

你还不如直接用一个temp struct直接赋给*p呢

对你的数组的设计个人觉得一点意思都没,俺睡觉了,你参考一下吧

如果非要用字节对齐,我给你看个代码

#include <stdlib.h>
#include <stdio.h>
typedef struct
{
int a;
int b;
}A;
int main()
{
A *p = (A *)malloc(sizeof(A));
int i =0;
for(i=0;i<2; i++)
*(int *)((char *)p+i*sizeof(int)) = 1;
printf("%d%d", p->a, p->b);
return 0;
}
battle_boy 2008-05-11
  • 打赏
  • 举报
回复
呵呵
我本来是想用for循环来实现,这样就不用写好计划了(加入我的结构体又20个成员呢?)
我把a[0]定义成数组的长度就是想用来做for循环的
for(i = 0;i < a[0];i++)
{
P=a[1];//请问这边用什么方法写呢?
}
Treazy 2008-05-11
  • 打赏
  • 举报
回复
你把问题说明白了不就清楚了嘛

moto_set的各个成员如果分别用a,b,c,d,e来代表的话
那就直接赋值咯

p->a = a[1];
p->b = a[2];
p->c = a[3];
p->d = a[4];
p->e = a[5];
battle_boy 2008-05-11
  • 打赏
  • 举报
回复
我所用的是C语言是用在单片机上面的,支持标准C,一般写的都时候链表之类的都很少用到。
moto_set结构体假设包含5个成员
我那个a[]数组就是6个元素,a[0]是数组长度,a[1]~a[5]是整形的,a[1]给moto_Set的第一个成员,a[2]付给第2个成员。。类推
我定义的那个指针,实际是为了写的时候方便。指针是指向结构体的,如果p+=1的话,会不知道指向什么地方了。
想上面定义的指针好像不能p[i]这样操作吧
Treazy 2008-05-11
  • 打赏
  • 举报
回复
我只是告诉你了该怎么个用法

我都不知道你怎么定义的,a中的元素结构是否和moto_set的结构一样

另外你p如何分配的,

我给的demo你都看不明白,我怀疑你的代码是如何写的了

所以你还是把你代码帖的完全点吧

我给你的实际上已经说明问题了,可是你不理解!
battle_boy 2008-05-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 Treazy 的回复:]
C/C++ code
#define N 3
moto_set *p = (moto_set *)malloc(sizeof(moto_set)*N);

moto_set a[N+1] = {...}; //a[0]中存放长度,其他存放赋值的结构体,len返回长度

for(i=0; i <len(a[0]); i++) //a[0]存的是数组的长度
{
p[i] = a[i+1];
}
[/Quote]

谢谢你的解答,moto_set a[N+1] ,a[]这个数组,我是在别的C文件中已经定义好的了,我想通过for循环来把这个定义好的数组付给 moto_set这个结构体。
其实也可以不使用for循环的,不知道你又没有别的什么办法。
上面moto_set *p = (moto_set *)malloc(sizeof(moto_set)*N);这个不是很明白
能解释一下了吗?
谢谢!
Treazy 2008-05-11
  • 打赏
  • 举报
回复

#define N 3
moto_set *p = (moto_set *)malloc(sizeof(moto_set)*N);

moto_set a[N+1] = {...}; //a[0]中存放长度,其他存放赋值的结构体,len返回长度

for(i=0; i <len(a[0]); i++) //a[0]存的是数组的长度
{
p[i] = a[i+1];
}

battle_boy 2008-05-11
  • 打赏
  • 举报
回复
你说的那种方法不行啊。
battle_boy 2008-05-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Treazy 的回复:]
p是指针,还是*p是指针
[/Quote]
p是指针啊
我没用双重指针,我找找书在看看又没有你那种用法
Treazy 2008-05-11
  • 打赏
  • 举报
回复
p是指针,还是*p是指针
battle_boy 2008-05-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Treazy 的回复:]
C/C++ code
for(i=0;i <len(a[0]); i++) //a[0]存的是数组的长度
{
p[i] = a[i+1];
}
[/Quote]
这样做行吗?
我的*p指向的是一个结构体啊?
Treazy 2008-05-11
  • 打赏
  • 举报
回复

for(i=0;i <len(a[0]); i++) //a[0]存的是数组的长度
{
p[i] = a[i+1];
}

目 录 序言 前言 第1章 程序设计与算法 1 1.1 程序设计语言的发展 1 1.2 C语言的特点 2 1.2.1 C语言是中级语言 2 1.2.2 C语言是结构化语言 3 1.2.3 C语言是程序员的语言 3 1.3 C语言的程序结构 4 1.3.1 基本程序结构 4 1.3.2 函数库和链接 6 1.3.3 开发一个C程序 7 1.3.4 C语言的关键字 7 1.4 算法 8 1.4.1 流程图与算法的结构化描述 9 1.4.2 用N-S图描述算法 12 1.4.3 用PAD图描述算法 13 第2章 数据类型、运算符和表达式 14 2.1 C语言的数据类型 14 2.2 常量与变量 15 2.2.1 标识符命名 15 2.2.2 常量 16 2.2.3 变量 16 2.3 整型数据 16 2.3.1 整型常量 16 2.3.2 整型变量 17 2.4 实型数据 18 2.4.1 实型常量 18 2.4.2 实型变量 18 2.5 字符型数据 19 2.5.1 字符常量 19 2.5.2 字符串常量 19 2.5.3 转义字符 20 2.5.4 符号常量 20 2.5.5 字符变量 21 2.6 运算符 22 2.6.1 算术运算符 22 2.6.2 自增和自减 22 2.6.3 关系和逻辑运算符 23 2.6.4 位操作符 24 2.6.5 ?操作符 26 2.6.6 逗号操作符 27 2.6.7 关于优先级的小结 27 2.7 表达式 28 2.7.1 表达式中的类型转换 28 2.7.2 构成符cast 29 2.7.3 空格与括号 29 2.7.4 C语言中的简写形式 29 第3章 程序控制语句 31 3.1 程序的三种基本结构 31 3.2 数据的输入与输出 31 3.2.1 scanf()函数 31 3.2.2 printf()函数 33 3.2.3 getchar()函数与putchar()函数 36 3.2.4 程序应用举例 37 3.3 条件控制语句 38 3.3.1 if 语句 38 3.3.2 switch 语句 43 3.3.3 程序应用举例 45 3.4 循环控制语句 46 3.4.1 while语句 47 3.4.2 do... while 语句 49 3.4.3 for 语句 50 3.4.4 break与continue语句 53 3.4.5 程序应用举例 54 第4章 函数 57 4.1 函数说明与返回值 57 4.1.1 函数的类型说明 57 4.1.2 返回语句 58 4.2 函数的作用域规则 60 4.2.1 局部变量 60 4.2.2 全局变量 61 4.2.3 动态存储变量 62 4.2.4 静态存储变量 63 4.3 函数的调用与参数 63 4.3.1 形式参数与实际参数 64 4.3.2 赋值调用与引用调用 64 4.4 递归 64 4.5 实现问题 66 4.5.1 参数和通用函数 66 4.5.2 效率 66 4.6 函数库和文件 67 4.6.1 程序文件的大小 67 4.6.2 分类组织文件 67 4.6.3 函数库 67 4.7 C语言的预处理程序与注释 67 4.7.1 C语言的预处理程序 68 4.7.2 #define 68 4.7.3 #error 69 4.7.4 # include 69 4.7.5 条件编译命令 70 4.7.6 #undef 72 4.7.7 #line 73 4.7.8 #pragma 73 4.7.9 预定义的宏名 73 4.7.10 注释 73 4.8 程序应用举例 74 第5章 数组 78 5.1 一维数组 78 5.1.1 向函数传递一维数组 78 5.1.2 字符串使用的一维数组 79 5.2 二维数组 80 5.2.1 二维数组的一般形式 80 5.2.2 字符串数组 84 5.3 多维数组 85 5.4 数组的初始化 85 5.4.1 数组初始化 85 5.4.2 变长数组的初始化 86 5.5 应用程序举例 87 第6章 指针 91 6.1 指针与指针变量 91 6.2 指针变量的定义与引用 92 6.2.1 指针变量的定义 92 6.2.2 指针变量的引用 93 6.3 指针运算符与指针表达式 94 6.3.1 指针运算符与指针表达式 94 6.3.2 指针变量作函数的参数 95 6.4 指针与数组 96 6.4.1 指针与一维数组 97 6.4.2 指针与二维数组 99 6.4.3 数组指针作函数的参数 102 6.4.4 指针与字符数组 108 6.5 指针的地址分配 111 6.6 指针数组 112 6.7 指向指针的指针 118 6.8 main函数的参数 121 第7章 结构体与共用体 125 7.1 结构体类型变量的定义和引用 125 7.1.1 结构体类型变量的定义 126 7.1.2 结构体类型变量的引用 127 7.1.3 结构体类型变量的初始化 127 7.2 结构体数组的定义和引用 129 7.3 结构体指针的定义和引用 135 7.3.1 指向结构体类型变量的使用 135 7.3.2 指向结构体类型数组的指针的 使用 136 7.4 链表的建立、插入和删除 138 7.4.1 单链表 139 7.4.2 单链表的插入与删除 141 7.5 共用体 149 7.5.1 共用体的定义 149 7.5.2 共用体变量的引用 150 第8章 输入、输出和文件系统 153 8.1 缓冲文件系统 153 8.1.1 文件的打开与关闭 153 8.1.2 文件的读写 155 8.1.3 随机读写文件 163 8.2 非缓冲文件系统 166 8.3 文件系统应用举例 167 第9章 实用编程技巧 170 9.1 图形应用技巧 170 9.1.1 显示适配器类型的自动测试 170 9.1.2 屏幕图像的存取技巧 179 9.1.3 屏幕显示格式的控制方法 181 9.1.4 使图形软件脱离BGI的方法 182 9.1.5 拷贝屏幕图形的方法 183 9.1.6 随意改变VGA显示器显示颜色的 技巧 185 9.1.7 用随机函数实现动画的技巧 187 9.1.8 用putimage 函数实现动画的技巧 189 9.2 菜单设计技术 191 9.2.1 下拉式菜单的设计 191 9.2.2 选择式菜单的设计 194 9.2.3 实现阴影窗口的技巧 195 9.3 音响技巧 197 9.3.1 音乐程序设计 197 9.3.2 自动识谱音乐程序 200 9.3.3 实现后台演奏音乐的技巧 203 第10章 C++入门 205 10.1 面向对象的概念 205 10.1.1 面向对象的程序结构 205 10.1.2 C++的类 206 10.2 C++的输入与输出 207 10.3 类与对象 208 10.3.1 类的定义与对象的引用 209 10.3.2 构造函数与析构函数 211 10.3.3 函数重载 215 10.3.4 友元 216 10.4 对象指针 219 10.5 派生类与继承类 225 10.5.1 单继承的派生类 225 10.5.2 多继承的派生类 233 附录A 常用字符与ASCII代码对照表 238 附录B 习题 239

69,371

社区成员

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

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