2010-04-29 54 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

相關問題