找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2758|回复: 10

【纯C】模拟一下vb里的for each,python里的for语句

[复制链接]

65

主题

115

回帖

1万

积分

用户组: 超级版主

OS与VM研究学者

UID
1043
精华
35
威望
789 点
宅币
8294 个
贡献
1094 次
宅之契约
0 份
在线时间
2067 小时
注册时间
2015-8-15
发表于 2017-10-9 07:47:30 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
本帖最后由 tangptr@126.com 于 2017-10-8 21:59 编辑

本人所读大学里,计算机课程讲的编程语言是Python,其中讲到了for循环的使用方式,大概要这么写:
  1. for x in a:
  2.         print(x)
复制代码

可以省略掉遍历数组时使用的索引变量,在VB里可以这么写:
  1. For Each x In a
  2.         Print CStr(x)
  3. Next
复制代码

不过在C语言里好像没有这种骚操作了,毕竟是“无资源托管”的编程语言,必须要自己管理资源,想了想大概得这么写:
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. void Main()
  4. {
  5.         int a[4]={3,6,7,9};
  6.         int i=0,b=0;
  7.         for(b=a[0];i<4;b=a[++i])printf("%d\t",b);
  8.         printf("\n");
  9.         system("pause");
  10. }
复制代码

好蛋疼,写for语句之前还得i=0一下,写for语句时还得限制索引!
但效果还可以吧。。。
Capture.JPG
最后注意一下,照抄代码的时候改链接器属性中入口函数的符号名为Main,或者改Main函数名为main,不然链接器会报错
回复

使用道具 举报

1111

主题

1651

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
244
威望
743 点
宅币
24237 个
贡献
46222 次
宅之契约
0 份
在线时间
2297 小时
注册时间
2014-1-26
发表于 2020-9-13 12:50:11 | 显示全部楼层
watermelon 发表于 2020-9-12 23:26
所以我认为在py里面用for的时候请三思!在保证代码可读性的情况下,可以多多考虑列表(或字典、元组等) ...

写个for都要忌惮这么多东西,我选择放弃这门语言
回复 赞! 1 靠! 0

使用道具 举报

1111

主题

1651

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
244
威望
743 点
宅币
24237 个
贡献
46222 次
宅之契约
0 份
在线时间
2297 小时
注册时间
2014-1-26
发表于 2018-12-17 00:11:28 | 显示全部楼层
其实可以利用一下宏和sizeof,实现一个countof,然后再用宏来实现自动遍历数组。

#define countof(x) (sizeof (x) / sizeof (x)[0])
#define for_each(x) for(int i = 0; i < countof(x); i++)

然后祈祷你遇到的编译器支持for(int i = 0;这种写法吧。
回复 赞! 1 靠! 0

使用道具 举报

1111

主题

1651

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
244
威望
743 点
宅币
24237 个
贡献
46222 次
宅之契约
0 份
在线时间
2297 小时
注册时间
2014-1-26
发表于 2017-10-9 09:29:05 | 显示全部楼层
我劝你不要把main搞成大写开头的Main,不然会有人照抄你的代码然后不知道调链接器属性,最后不能运行,就说我这网站坑人。
回复 赞! 靠!

使用道具 举报

307

主题

228

回帖

7337

积分

用户组: 真·技术宅

UID
2
精华
76
威望
291 点
宅币
5587 个
贡献
253 次
宅之契约
0 份
在线时间
948 小时
注册时间
2014-1-25
发表于 2017-10-9 17:55:59 | 显示全部楼层
c语法不会有太大更新了,不过可以考虑一下c++11特性吧,或许对你有帮助


  1. #include <iostream>
  2. using namespace std;

  3. int main() {
  4.         for(auto i : {1,2,3,4}){
  5.                 cout << i << endl;
  6.         }
  7.         return 0;
  8. }
复制代码


结果:
Success        #stdin #stdout 0s 15240KB
1
2
3
4

Success        #stdin #stdout 0s 15224KB
回复 赞! 靠!

使用道具 举报

1

主题

83

回帖

89

积分

用户组: 小·技术宅

UID
3026
精华
0
威望
1 点
宅币
3 个
贡献
0 次
宅之契约
0 份
在线时间
6 小时
注册时间
2017-10-31
发表于 2017-11-8 08:39:06 | 显示全部楼层
收藏先,慢慢消化
回复 赞! 靠!

使用道具 举报

29

主题

315

回帖

1561

积分

用户组: 上·技术宅

UID
3808
精华
11
威望
105 点
宅币
702 个
贡献
165 次
宅之契约
0 份
在线时间
404 小时
注册时间
2018-5-6
发表于 2018-12-16 01:15:23 | 显示全部楼层
顶tangptr大佬,Python这个脚本语言骚操作还是很多的。
Passion Coding!
回复 赞! 靠!

使用道具 举报

29

主题

315

回帖

1561

积分

用户组: 上·技术宅

UID
3808
精华
11
威望
105 点
宅币
702 个
贡献
165 次
宅之契约
0 份
在线时间
404 小时
注册时间
2018-5-6
发表于 2020-9-12 23:24:28 | 显示全部楼层
py里面对与for...in x 还是挺慢的,因为in后面x必须是一个可迭代对象,所以,他需要调用iter(x),然后iter(x)的底层是x.__iter__( )方法,之后再转到C里面,如此看来,py在这方面比tangptr大佬和楼上A5大佬写的宏慢多了......
Passion Coding!
回复 赞! 靠!

使用道具 举报

29

主题

315

回帖

1561

积分

用户组: 上·技术宅

UID
3808
精华
11
威望
105 点
宅币
702 个
贡献
165 次
宅之契约
0 份
在线时间
404 小时
注册时间
2018-5-6
发表于 2020-9-12 23:26:10 | 显示全部楼层
watermelon 发表于 2020-9-12 23:24
py里面对与for...in x 还是挺慢的,因为in后面x必须是一个可迭代对象,所以,他需要调用iter(x),然后iter( ...

所以我认为在py里面用for的时候请三思!在保证代码可读性的情况下,可以多多考虑列表(或字典、元组等)推导式和函数式编程,因为当你使用for的时候,就意味着你要为代码的速度做出一定的牺牲!
Passion Coding!
回复 赞! 靠!

使用道具 举报

29

主题

315

回帖

1561

积分

用户组: 上·技术宅

UID
3808
精华
11
威望
105 点
宅币
702 个
贡献
165 次
宅之契约
0 份
在线时间
404 小时
注册时间
2018-5-6
发表于 2020-9-13 21:21:37 | 显示全部楼层
0xAA55 发表于 2020-9-13 12:50
写个for都要忌惮这么多东西,我选择放弃这门语言

好,干脆利索,很有精神!
然而小弟我还是离不开py(菜来着)
Passion Coding!
回复 赞! 靠!

使用道具 举报

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-4-20 22:08 , Processed in 0.041413 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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