原文:Exercise 10: Arrays Of Strings, Looping
你现在可以创建不同类型的数组,并且也知道了“字符串”和“字节数组”是相同的东西。接下来,我们要更进一步,创建一个包含字符串的数组。我也会介绍第一个循环结构,for循环来帮我们打印出这一新的数据结构。
for
这一章的有趣之处就是你的程序中已经有一个现成的字符串数组,main函数参数中的char *argv[]。下面这段代码打印出了所有你传入的命令行参数:
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循环的工作机制:
INITIALIZER
i = 0
TEST
false
CODE
INCREMENTER
i++
例子中的for循环使用argc和argv,遍历了命令行参数,像这样:
argc
argv
./ex10
i < argc
i
1 < 2
i = i + 1
你需要用两种方法运行它来玩转这个程序。第一种方法是向命令行参数传递一些东西来设置argc和argv。第二种是不传入任何参数,于是你可以看到第一次的for循环没有被执行,由于i < argc值为false。
你应该可以从这个练习中弄明白,你在C语言中通过混合char *str = "blah"和char str[] = {'b','l','a','h'}语法构建二维数组来构建字符串数组。第十四行的char *states[] = {...}语法就是这样的二维混合结构,其中每个字符串都是数组的一个元素,字符串的每个字符又是字符串的一个元素。
char *str = "blah"
char str[] = {'b','l','a','h'}
char *states[] = {...}
感到困惑吗?多维的概念是很多人从来都不会去想的,所以你应该在纸上构建这一字符串数组:
理解它的另一种方法是在你熟悉的语言,比如Python或Ruby中构建相同的结构。
num_states
','
';'
NULL
states
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8