2014-04-25 56 views
3

我正在使用cplusplus.com和C++ Programming Easy Steps通過Mike McGrath來完成您一直在做的事的終生目標。COUT用這些整數做什麼?

我是理解和學習,但我已經達到了一個我似乎無法回答的問題,這很可能是因爲我問的方式。

在這本書中,我們通過一個實例

#include <iostream> 
using namespace std ; 

int main() 
{ 
    float nums[3] ; // Declared then initialized. 
    nums[0] = 1.5 ; nums[1] = 2.75 ; nums[2] = 3.25 ; 

    // Declared and initialized. 
    char name[5] = { 'm', 'i', 'k', 'e', '\0' } ; 
    int coords[2] [3] = { { 1, 2, 3 } , { 4, 5, 6 } } ; 

    cout << "nums[0]: " << nums[0] << endl ; 
    cout << "nums[1]: " << nums[1] << endl ; 
    cout << "nums[2]: " << nums[2] << endl ; 
    cout << "name[0]: " << name[0] << endl ; 
    cout << "Text string: " << name << endl ; 
    cout << "coords[0][2]: " << coords[0][2] << endl ; 
    cout << "coords[1][2]: " << coords[1][2] << endl ; 

    return 0 ; 
} 

現在,我明白這裏使用的所有代碼,但我不明白的是如何在最後兩個cout的工作。因此,如果我的理解正確,我們在這裏所做的是將coords(座標)定義爲int coords[2] [3] = { { 1, 2, 3 } , { 4, 5, 6 } };。對。現在我們正在輸出數據,對吧?好的,所以我們說[0] [2],如果加上,就等於五。但是3是輸出。

所以我的第一個假設是cout必須乘以兩個整數。但在第二個例子中,我們看到1和2分別是2和3,當它們相乘時,它們等於6。到現在爲止還挺好。但是,我發現,如果我改變6到9,輸出是...... 9.那麼,這裏發生了什麼? COUT在這裏做什麼?

+0

int coords [2] [3]是2行3列。因此coords [0] [2]是第一行第三列,索引從0開始 –

+1

這些索引是矩陣的索引,所以您只需索引即可獲取所需的元素。並祝你一生的目標:) –

回答

9

這不是增加,它不是相乘 - 它是索引。您有一個二維數組,並且行0的元素2包含數字3

+0

簡潔,正是我所需要的。非常感謝你。 – Paul

3

爲什麼你認爲cout與算術運算有什麼關係?它沒有。它只是輸出值。對於coords[0][2],即第一個( +1)數組中的第三個(+1 +1)元素。這是3

注意這一點:

int x = coords[0][2]; 
cout << x << endl; 

這將打印同樣的事情。

順便說一句,我希望你認識到std::vectorstd::string是C++中首選的工具,而不是數組。

+0

我想了解兩件事情的調用是什麼。我從錯誤的角度看待它。我很抱歉。 – Paul

+0

無需道歉提問! –

2
int coords[2] [3] = { { 1, 2, 3 } , { 4, 5, 6 } } ; 

定義多維數組,很像2行& 3列的矩陣。

cout << "coords[0][2]: " << coords[0][2] << endl ; 

上述行打印的值在第一行&第三列[C/C++是零種指數基於語言]

+0

非常感謝! – Paul

1

首先,cout沒有做任何事情比顯示它們作爲字符串其他的數字。

其次,[ * ]不會更改數字。而是指數組中的一個位置。例如,char k = name[2];查看數組name中的第二個字符,相當於char k = *(name + 2);。對於二維數組,int value = coords[2][1]指的是第一層coords中的第一個元素。這相當於int value = *(coords + ((2 * WIDTH) + 1));。一個三維數組遵循該趨勢,其中float x = cubemap[8][11][3];將等於float x = *(cubemap + (((8 * (WIDTH * HEIGHT)) + (11 * WIDTH)) + 3));。這些都不會影響數組中的實際值,而是這些索引號就是指定位置。