2010-04-29 62 views
3

我一直在玩弄指针以更好地理解它们,并且遇到了一些我认为我应该能够做的事情,但无法排序如何。下面的代码工作正常 - 我可以输出“a”,“狗”,“袜子”和“裤子” - 但是如果我只想从“袜子”中输出“o”,该怎么办?我会怎么做?如何在使用char * [] =“something”时输出单个字符

char *mars[4] = { "a", "dog", "sock", "pants" }; 

for (int counter = 0; counter < 4; counter++) 
{ 
    cout << mars[ counter ]; 
} 

请原谅我,如果这个问题是某处回答 - 有30多页C++指针相关的问题,我花了约90分钟翻翻他们,以及阅读各种(非常丰富)的文章,前决定问。

回答

7

mars[i][j]将打印i'字符串的j'字符。

因此mars[2][1]是'o'。

+0

呃......那是可笑的简单。我认为它会产生一维数组。 – Azoreo 2010-04-29 06:34:15

1
cout << mars[2][1] ; 

marschar *阵列,使得让你必须索引各个炭成char

0

mars[counter]char *类型的阵列,指向字符的零终止的字符串。所以你可以:

for (int counter = 0; counter < 4; counter++) 
{ 
    char * str = mars[ counter ]; 
    size_t len = strlen(str); 

    if (len >= 2) 
    cout << str[1]; 
} 
+0

这个答案在我头上,不幸的是:9 – Azoreo 2010-04-29 22:04:29

2

正如前面已经指出的,字符串是数组。实际上,这个概念是在std::string-class(顺便说一下,它是C++中表示字符串的首选方法)上执行的,它实现了STL-Sequence的所有要求。此外,它实现了数组下标运算符。这意味着表达:如果mars声明为

std::vector<std::string> mars; 

这是更为处理这个C​​ ++的方式

mars[i][j] 

也将工作。我意识到你正在这样做来了解指针,但我只是想我会添加这个信息。此外,在了解C++中的指针时,您还应该了解iterators,因为它们是generalizations of pointers

0

因为其他人所说简便的方法,也请您发现这样做的一个迂回的方式;)

char *myChar = &mars[ 1 ][0]; 
int nPosOfCharToLocate = 1; 
myChar = myChar + nPosOfCharToLocate; 
cout <<*myChar<<endl; 
+0

Wimpy。我会使用'char const * myChar =(mars.begin()+ 1) - > data();'。 – 2013-03-01 04:39:20

相关问题