笨办法学C 翻译程序员

笨办法学C 练习10:字符串数组和循环

2016-04-13  本文已影响518人  布客飞龙

练习10:字符串数组和循环

原文:Exercise 10: Arrays Of Strings, Looping

译者:飞龙

你现在可以创建不同类型的数组,并且也知道了“字符串”和“字节数组”是相同的东西。接下来,我们要更进一步,创建一个包含字符串的数组。我也会介绍第一个循环结构,for循环来帮我们打印出这一新的数据结构。

这一章的有趣之处就是你的程序中已经有一个现成的字符串数组,main函数参数中的char *argv[]。下面这段代码打印出了所有你传入的命令行参数:

include <stdio.h>

int main(int argc, char *argv[])
{
    int i = 0;

    // go through each string in argv
    // why am I skipping argv[0]?
    for(i = 1; i < argc; i++) {
        printf("arg %d: %s\n", i, argv[i]);
    }

    // let's make our own array of strings
    char *states[] = {
        "California", "Oregon",
        "Washington", "Texas"
    };
    int num_states = 4;

    for(i = 0; i < num_states; i++) {
        printf("state %d: %s\n", i, states[i]);
    }

    return 0;
}

for循环的格式是这样的:

for(INITIALIZER; TEST; INCREMENTER) {
    CODE;
}

下面是for循环的工作机制:

例子中的for循环使用argcargv,遍历了命令行参数,像这样:

你会看到什么

你需要用两种方法运行它来玩转这个程序。第一种方法是向命令行参数传递一些东西来设置argcargv。第二种是不传入任何参数,于是你可以看到第一次的for循环没有被执行,由于i < argc值为false

理解字符串数组

你应该可以从这个练习中弄明白,你在C语言中通过混合char *str = "blah"char str[] = {'b','l','a','h'}语法构建二维数组来构建字符串数组。第十四行的char *states[] = {...}语法就是这样的二维混合结构,其中每个字符串都是数组的一个元素,字符串的每个字符又是字符串的一个元素。

感到困惑吗?多维的概念是很多人从来都不会去想的,所以你应该在纸上构建这一字符串数组:

理解它的另一种方法是在你熟悉的语言,比如Python或Ruby中构建相同的结构。

如何使它崩溃

附加题

上一篇 下一篇

猜你喜欢

热点阅读