954,152 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

The Char Data Type with 1 vs 2 Dimensional Array

Hey, here are two codes and with one slight difference they do different things
CODE 1

#include<iostream>
using namespace std;
int main()
{
char array[2];
int i=0;
while (i<2)
{
cin>>array[i];
i++;
}
cout<<array[0]<<' '<<array[1];
}


EXAMPLE OUTPUT:

two words
t w


CODE 2

#include<iostream>
using namespace std;
int main()
{
char array[2][100];
int i=0;
while (i<2)
{
cin>>array[i];
i++;
}
cout<<array[0]<<' '<<array[1];
}


EXAMPLE OUTPUT:

two words
two words

How is that occurring, by adding an extra dimension to array it takes both words. What is going on....lol


Thanks!

salman213
Light Poster
32 posts since Jun 2008
Reputation Points: 10
Solved Threads: 0
 

>How is that occurring, by adding an extra dimension to array it takes both words.
It helps to know that the native string type in C++ is actually an array of char, and cin's >> operator is pretty smart about knowing what types you give it. When array[i] is an array of char, cin>>array[i]; will read a word into it. when array[i] is a single char, cin>>array[i]; will read a single character into it.

Narue
Bad Cop
Administrator
15,460 posts since Sep 2004
Reputation Points: 6,464
Solved Threads: 1,401
 

You need to read a basic tutorials on arrays... Seeing this is c++ have a look at std::strings as well.

iamthwee
Posting Expert
5,950 posts since Aug 2005
Reputation Points: 1,543
Solved Threads: 439
 

is it possible to think of it as a matrix?

for example

char array[2][2];


Isn't this what we are forming

0     1 
0   
 
1


If we do

cin>> array[0]

and we input the word: "WHAT"
how is that being placed in to the matrix I drew.

To display the word I played around and found I can do this:

cout<< array[0][0]<<array[0][1]<<array[0][2]<<array[0][3]

But I thought the maximum it can go to was array [1][1] ?? So how can those arrays be defined.

I mean the only combinations I thought were possible according to a tutorial I read were

array[0][0]
array[0][1]
array[1][0]
array[1][1]

salman213
Light Poster
32 posts since Jun 2008
Reputation Points: 10
Solved Threads: 0
 

is it possible to think of it as a matrix? for example

char array[2][2];

Isn't this what we are forming

0     1 
0   
 
1

If we do

cin>> array[0]

and we input the word: "WHAT" how is that being placed in to the matrix I drew.

To display the word I played around and found I can do this:

cout<< array[0][0]<<array[0][1]<<array[0][2]<<array[0][3]

But I thought the maximum it can go to was array [1][1] ?? So how can those arrays be defined.

I mean the only combinations I thought were possible according to a tutorial I read were

array[0][0] array[0][1] array[1][0] array[1][1]


When the compiler saw this line:

char array[2][2];


it set aside memory for 2 x 2 = 4 bytes of contiguous memory. Let's say it stored array[0][0] at the following address in memory:

0xaa0000


The four characters would be stored at the following addresses:

array[0][0]   0xaa0000
array[0][1]   0xaa0001
array[1][0]   0xaa0002
array[1][1]   0xaa0003


If you are referring to the element array[i][j], the computer figures out which address in memory is being referred to by this mathematical equation:

address = address of array[0][0] + offset


where offset is calculated as:

(i times number of rows) + j


In your case the number of rows = 2, so offset is:

offset = 2i + j


So in the case of array[0][3], i = 0 and j = 3, so:

offset = 0 * 2 + 3 = 3


The address of array[0][3] is thus:

0xaa0000 + 3 = 0xaa0003


which is the address of array[1][1], so array[1][1] and array[0][3] are equivalent here, so when you displayed array[0][3], you were really displaying what was stored at array[1][1], which is 'T'.

However, even though you can get away with it, it's probably not a great habit to get into and you should probably only reference the elements array[0][0], array[0][1], array[1][0], and array[1][1].

VernonDozier
Posting Expert
5,527 posts since Jan 2008
Reputation Points: 2,633
Solved Threads: 711
 

alright thanks alot for explaining so clearly. :)

cool..

salman213
Light Poster
32 posts since Jun 2008
Reputation Points: 10
Solved Threads: 0
 

This question has already been solved

Post: Markdown Syntax: Formatting Help
You