OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5626|回复: 29

关于数组与结构体数组的一些问题

[复制链接]

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
发表于 2016-7-19 09:12:06 | 显示全部楼层 |阅读模式
50金钱
我知道定义数组时必须指定数组的大小,有什么方法可以定义一个不定长度的数组吗?我是想定义一个全局变量的结构体数组,但是不指定数组的具体长度,因为这个数组需要在后续的函数中被调用,有些函数需要这个结构体数组中有一个成员,有些函数需要这个结构体数组有两个成员,有什么好的办法吗?是在keil4编程中遇到的一个问题,求帮忙,求围观

最佳答案

查看完整内容[请看2#楼]

我看了下需求,感觉还是可以解决你的问题的。 或许我没有解释清楚,可以加我qq16163184,我详细了解下你的需求
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2016-7-19 09:12:07 | 显示全部楼层
qingyu111 发表于 2016-7-19 11:10
那我的情况就用不了你说的柔性数组了。。。不过你推荐了一种很多人没见过的方法,还是要感谢你的。。。

我看了下需求,感觉还是可以解决你的问题的。
或许我没有解释清楚,可以加我qq16163184,我详细了解下你的需求
机器生汇编,汇编生B,B生C,C生万物.... 经过长期对C语言的研究,目前只有两个方面不懂:这也不懂,那也不懂
https://github.com/ianhom
回复

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-7-19 09:15:51 | 显示全部楼层
yklstudent 发表于 2016-7-19 09:14
定义一个定长的好了

你具体说说呗
回复

使用道具 举报

0

主题

183

帖子

0

精华

高级会员

Rank: 4

积分
684
金钱
684
注册时间
2016-1-27
在线时间
184 小时
发表于 2016-7-19 09:22:38 | 显示全部楼层
需要有一个成员,需要有两个成员,什么意思,定义三个成员,有一个不用不行吗?
你把根本问题讲一下呗,一起思考思考
回复

使用道具 举报

7

主题

42

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
325
金钱
325
注册时间
2016-2-28
在线时间
48 小时
发表于 2016-7-19 09:25:10 | 显示全部楼层
用指针?
回复

使用道具 举报

117

主题

598

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
1702
金钱
1702
注册时间
2012-5-10
在线时间
439 小时
发表于 2016-7-19 09:25:20 | 显示全部楼层
1,数据必须定义长度,结构体数组也是,2程序中最好不要出现全局变量,3,多使用动态内存,一个指针占4个内存,然后申请内存,使用完释放,使用几个成员就申请几个成员
回复

使用道具 举报

3

主题

177

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1604
金钱
1604
注册时间
2016-1-28
在线时间
265 小时
发表于 2016-7-19 09:29:39 | 显示全部楼层
楼上说的对!
宠辱不惊看庭前花开花落去留无意望天上云卷云舒。
回复

使用道具 举报

19

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1341
金钱
1341
注册时间
2016-4-22
在线时间
187 小时
发表于 2016-7-19 09:29:59 | 显示全部楼层
你要变长,可以考虑链表。但是感觉一般也没有这种必要,毕竟stm32内存就那么大,你要你的项目能顺利跑起来,肯定要考虑你的结构体最多时有几个,这个时候是否能正常工作。那这样其实定义一个最大数目的数组也一样。因为整体环境stm32不是跑多应用,所有资源都是给你使用。
伤情最是晚凉天,憔悴斯人不堪怜。
邀酒摧肠三杯醉,寻香惊梦五更寒。
钗头凤斜卿有泪,荼蘼花了我无缘。
小楼寂寞新雨月,也难如钩也难圆。
回复

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-7-19 09:31:57 | 显示全部楼层
不吃鱼的老鼠 发表于 2016-7-19 09:22
需要有一个成员,需要有两个成员,什么意思,定义三个成员,有一个不用不行吗?
你把根本问题讲一下呗,一 ...

比如我定义了一个a[x],我的工程中这个x不能是固定的,因为工程中有好几个函数需要调用a[x],并且这些函数需要根据x的具体数值去确定运行几次。但是都指到数组定义时必须指定大小啊
回复

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-7-19 09:32:13 | 显示全部楼层

怎么用?
回复

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-7-19 09:36:50 | 显示全部楼层
xsx127 发表于 2016-7-19 09:25
1,数据必须定义长度,结构体数组也是,2程序中最好不要出现全局变量,3,多使用动态内存,一个指针占4个内 ...

第1个我知道。第2个为什么不要用全局变量?这只是纯c语言,不涉及c++啊,我一直在用全局变量。第3个动态内存不太会使用啊,也不知道什么时候释放,STM32不都是在死循环中运行的么?什么时候释放好?
回复

使用道具 举报

3

主题

177

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1604
金钱
1604
注册时间
2016-1-28
在线时间
265 小时
发表于 2016-7-19 09:37:15 | 显示全部楼层
不懂,帮顶!
宠辱不惊看庭前花开花落去留无意望天上云卷云舒。
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-7-19 09:37:47 | 显示全部楼层
qingyu111 发表于 2016-7-19 09:31
比如我定义了一个a[x],我的工程中这个x不能是固定的,因为工程中有好几个函数需要调用a[x],并且这些函 ...

数组的长度是固定的,你可以弄结构体,把数组和一个标志都弄进结构体,函数根据标志判断数组数据的有效个数
回复

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2016-7-19 09:43:27 | 显示全部楼层
机器生汇编,汇编生B,B生C,C生万物.... 经过长期对C语言的研究,目前只有两个方面不懂:这也不懂,那也不懂
https://github.com/ianhom
回复

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-7-19 09:47:10 | 显示全部楼层
憨厚诚实大叔 发表于 2016-7-19 09:37
数组的长度是固定的,你可以弄结构体,把数组和一个标志都弄进结构体,函数根据标志判断数组数据的有效个 ...

我先试试这个
回复

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-7-19 09:50:29 | 显示全部楼层
ianhom 发表于 2016-7-19 09:43
弄个柔性数组吧
http://blog.chinaunix.net/uid-29151369-id-4974324.html

我先看看什么是柔性数组,感谢前辈推荐啊
回复

使用道具 举报

15

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
274
金钱
274
注册时间
2016-7-15
在线时间
88 小时
发表于 2016-7-19 09:53:16 | 显示全部楼层
数组我也弄不懂啊,帮顶,求大神解答,共同学习。
回复

使用道具 举报

0

主题

183

帖子

0

精华

高级会员

Rank: 4

积分
684
金钱
684
注册时间
2016-1-27
在线时间
184 小时
发表于 2016-7-19 09:55:23 | 显示全部楼层
qingyu111 发表于 2016-7-19 09:31
比如我定义了一个a[x],我的工程中这个x不能是固定的,因为工程中有好几个函数需要调用a[x],并且这些函 ...

这个方法有很多
如果不是全局的,可以封装成函数
如果要定义成结构体数组,可以定义固定长度数组,考虑用其他方式取这个x的值,或者参考6楼,用动态内存分配,具体看需求
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-7-19 10:05:31 | 显示全部楼层
ianhom 发表于 2016-7-19 09:43
弄个柔性数组吧
http://blog.chinaunix.net/uid-29151369-id-4974324.html

看了下,学到了不少东西。。。。。。。。
回复

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-7-19 10:18:16 | 显示全部楼层
ianhom 发表于 2016-7-19 09:43
弄个柔性数组吧
http://blog.chinaunix.net/uid-29151369-id-4974324.html

只有结构体才能产生柔性数组吗?
比如定义一个结构体
struct _tTest_
{
    unsigned char wLen;      /* Length of data */
    unsigned char slen;
}T_TEST;
struct T_TEST  test[2];
这个test不能定义成柔性数组吧
回复

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2016-7-19 10:25:43 | 显示全部楼层
qingyu111 发表于 2016-7-19 10:18
只有结构体才能产生柔性数组吗?
比如定义一个结构体
struct _tTest_

一般都用结构体,可以包含长度信息等等,sizeof起来比较方便
你这里的test就是一个定长的结构体数组
机器生汇编,汇编生B,B生C,C生万物.... 经过长期对C语言的研究,目前只有两个方面不懂:这也不懂,那也不懂
https://github.com/ianhom
回复

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2016-7-19 10:26:24 | 显示全部楼层
憨厚诚实大叔 发表于 2016-7-19 10:05
看了下,学到了不少东西。。。。。。。。

我也是瞎学乱写的。。。
机器生汇编,汇编生B,B生C,C生万物.... 经过长期对C语言的研究,目前只有两个方面不懂:这也不懂,那也不懂
https://github.com/ianhom
回复

使用道具 举报

0

主题

183

帖子

0

精华

高级会员

Rank: 4

积分
684
金钱
684
注册时间
2016-1-27
在线时间
184 小时
发表于 2016-7-19 10:30:42 | 显示全部楼层
ianhom 发表于 2016-7-19 09:43
弄个柔性数组吧
http://blog.chinaunix.net/uid-29151369-id-4974324.html

这没法点赞,不然给你100个!
回复

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2016-7-19 10:38:17 | 显示全部楼层
不吃鱼的老鼠 发表于 2016-7-19 10:30
这没法点赞,不然给你100个!

都是和前辈学的,我总结的不是很好。。还是很感谢你
机器生汇编,汇编生B,B生C,C生万物.... 经过长期对C语言的研究,目前只有两个方面不懂:这也不懂,那也不懂
https://github.com/ianhom
回复

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-7-19 10:55:38 | 显示全部楼层
ianhom 发表于 2016-7-19 10:25
一般都用结构体,可以包含长度信息等等,sizeof起来比较方便
你这里的test就是一个定长的结构体数组

我其实想问的是能不能直接这样定义struct T_TEST  test[x]?
回复

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2016-7-19 10:59:42 | 显示全部楼层
struct _tTest_  test[x]这样的定义你得到一个成员数量为X的结构体数组,这里X必须是常量
机器生汇编,汇编生B,B生C,C生万物.... 经过长期对C语言的研究,目前只有两个方面不懂:这也不懂,那也不懂
https://github.com/ianhom
回复

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-7-19 11:10:30 | 显示全部楼层
ianhom 发表于 2016-7-19 10:59
struct _tTest_  test[x]这样的定义你得到一个成员数量为X的结构体数组,这里X必须是常量

那我的情况就用不了你说的柔性数组了。。。不过你推荐了一种很多人没见过的方法,还是要感谢你的。。。
回复

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-7-19 11:39:43 | 显示全部楼层
ianhom 发表于 2016-7-19 09:43
弄个柔性数组吧
http://blog.chinaunix.net/uid-29151369-id-4974324.html

非常感谢你亲自指导
回复

使用道具 举报

7

主题

42

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
325
金钱
325
注册时间
2016-2-28
在线时间
48 小时
发表于 2016-7-19 14:27:45 | 显示全部楼层

学C++的时候老师说指针即数组,数组即指针,数组初始化需要标明长度,但是指针的话只是个地址,空间是按实际分配的吧?我也不是特别清楚。。。希望能帮到你。。。
回复

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
 楼主| 发表于 2016-7-19 15:08:33 | 显示全部楼层
橘子先生 发表于 2016-7-19 14:27
学C++的时候老师说指针即数组,数组即指针,数组初始化需要标明长度,但是指针的话只是个地址,空间是按 ...

能帮到一点谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-13 07:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表