唐凌 发表于 2017-10-9 07:47:30

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

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

本人所读大学里,计算机课程讲的编程语言是Python,其中讲到了for循环的使用方式,大概要这么写:
for x in a:
        print(x)
可以省略掉遍历数组时使用的索引变量,在VB里可以这么写:
For Each x In a
        Print CStr(x)
Next
不过在C语言里好像没有这种骚操作了,毕竟是“无资源托管”的编程语言,必须要自己管理资源,想了想大概得这么写:
#include <stdio.h>
#include <stdlib.h>

void Main()
{
        int a={3,6,7,9};
        int i=0,b=0;
        for(b=a;i<4;b=a[++i])printf("%d\t",b);
        printf("\n");
        system("pause");
}
好蛋疼,写for语句之前还得i=0一下,写for语句时还得限制索引!
但效果还可以吧。。。

最后注意一下,照抄代码的时候改链接器属性中入口函数的符号名为Main,或者改Main函数名为main,不然链接器会报错

0xAA55 发表于 2020-9-13 12:50:11

watermelon 发表于 2020-9-12 23:26
所以我认为在py里面用for的时候请三思!在保证代码可读性的情况下,可以多多考虑列表(或字典、元组等) ...

写个for都要忌惮这么多东西,我选择放弃这门语言

0xAA55 发表于 2018-12-17 00:11:28

其实可以利用一下宏和sizeof,实现一个countof,然后再用宏来实现自动遍历数组。

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

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

0xAA55 发表于 2017-10-9 09:29:05

我劝你不要把main搞成大写开头的Main,不然会有人照抄你的代码然后不知道调链接器属性,最后不能运行,就说我这网站坑人。

元始天尊 发表于 2017-10-9 17:55:59

c语法不会有太大更新了,不过可以考虑一下c++11特性吧,或许对你有帮助


#include <iostream>
using namespace std;

int main() {
        for(auto i : {1,2,3,4}){
                cout << i << endl;
        }
        return 0;
}


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

Success        #stdin #stdout 0s 15224KB

(⊙o⊙) 发表于 2017-11-8 08:39:06

收藏先,慢慢消化

watermelon 发表于 2018-12-16 01:15:23

顶tangptr大佬,Python这个脚本语言骚操作还是很多的。

watermelon 发表于 2020-9-12 23:24:28

py里面对与for...in x 还是挺慢的,因为in后面x必须是一个可迭代对象,所以,他需要调用iter(x),然后iter(x)的底层是x.__iter__( )方法,之后再转到C里面,如此看来,py在这方面比tangptr大佬和楼上A5大佬写的宏慢多了......

watermelon 发表于 2020-9-12 23:26:10

watermelon 发表于 2020-9-12 23:24
py里面对与for...in x 还是挺慢的,因为in后面x必须是一个可迭代对象,所以,他需要调用iter(x),然后iter( ...

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

watermelon 发表于 2020-9-13 21:21:37

0xAA55 发表于 2020-9-13 12:50
写个for都要忌惮这么多东西,我选择放弃这门语言

好,干脆利索,很有精神!
然而小弟我还是离不开py(菜来着):Q
页: [1]
查看完整版本: 【纯C】模拟一下vb里的for each,python里的for语句