943,686 Members | Top Members by Rank

Ad:
  • C++ Discussion Thread
  • Marked Solved
  • Views: 1248
  • C++ RSS
Jun 20th, 2008
0

The Char Data Type with 1 vs 2 Dimensional Array

Expand Post »
Hey, here are two codes and with one slight difference they do different things
CODE 1
C++ Syntax (Toggle Plain Text)
  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. char array[2];
  6. int i=0;
  7. while (i<2)
  8. {
  9. cin>>array[i];
  10. i++;
  11. }
  12. cout<<array[0]<<' '<<array[1];
  13. }
EXAMPLE OUTPUT:
C++ Syntax (Toggle Plain Text)
  1. two words
  2. t w


CODE 2
C++ Syntax (Toggle Plain Text)
  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. char array[2][100];
  6. int i=0;
  7. while (i<2)
  8. {
  9. cin>>array[i];
  10. i++;
  11. }
  12. cout<<array[0]<<' '<<array[1];
  13. }
EXAMPLE OUTPUT:
C++ Syntax (Toggle Plain Text)
  1. two words
  2. two words




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


Thanks!
Similar Threads
Reputation Points: 10
Solved Threads: 0
Light Poster
salman213 is offline Offline
32 posts
since Jun 2008
Jun 20th, 2008
1

Re: The Char Data Type with 1 vs 2 Dimensional Array

>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.
Administrator
Reputation Points: 6442
Solved Threads: 1393
Bad Cop
Narue is offline Offline
11,807 posts
since Sep 2004
Jun 20th, 2008
0

Re: The Char Data Type with 1 vs 2 Dimensional Array

You need to read a basic tutorials on arrays... Seeing this is c++ have a look at std::strings as well.
Last edited by iamthwee; Jun 20th, 2008 at 5:14 pm.
Featured Poster
Reputation Points: 1536
Solved Threads: 431
Posting Expert
iamthwee is offline Offline
5,865 posts
since Aug 2005
Jun 20th, 2008
0

Re: The Char Data Type with 1 vs 2 Dimensional Array

is it possible to think of it as a matrix?

for example

C++ Syntax (Toggle Plain Text)
  1. char array[2][2];

Isn't this what we are forming
C++ Syntax (Toggle Plain Text)
  1. 0 1
  2. 0
  3.  
  4. 1

If we do
C++ Syntax (Toggle Plain Text)
  1. 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:
C++ Syntax (Toggle Plain Text)
  1. 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]
Last edited by salman213; Jun 20th, 2008 at 5:53 pm.
Reputation Points: 10
Solved Threads: 0
Light Poster
salman213 is offline Offline
32 posts
since Jun 2008
Jun 20th, 2008
0

Re: The Char Data Type with 1 vs 2 Dimensional Array

Click to Expand / Collapse  Quote originally posted by salman213 ...
is it possible to think of it as a matrix?

for example

C++ Syntax (Toggle Plain Text)
  1. char array[2][2];

Isn't this what we are forming
C++ Syntax (Toggle Plain Text)
  1. 0 1
  2. 0
  3.  
  4. 1

If we do
C++ Syntax (Toggle Plain Text)
  1. 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:
C++ Syntax (Toggle Plain Text)
  1. 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:

C++ Syntax (Toggle Plain Text)
  1. 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:

C++ Syntax (Toggle Plain Text)
  1. 0xaa0000

The four characters would be stored at the following addresses:

C++ Syntax (Toggle Plain Text)
  1. array[0][0] 0xaa0000
  2. array[0][1] 0xaa0001
  3. array[1][0] 0xaa0002
  4. 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:

C++ Syntax (Toggle Plain Text)
  1. address = address of array[0][0] + offset

where offset is calculated as:

C++ Syntax (Toggle Plain Text)
  1. (i times number of rows) + j

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

C++ Syntax (Toggle Plain Text)
  1. offset = 2i + j

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

C++ Syntax (Toggle Plain Text)
  1. offset = 0 * 2 + 3 = 3

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

C++ Syntax (Toggle Plain Text)
  1. 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].
Featured Poster
Reputation Points: 2614
Solved Threads: 687
Posting Expert
VernonDozier is offline Offline
5,372 posts
since Jan 2008
Jun 20th, 2008
0

Re: The Char Data Type with 1 vs 2 Dimensional Array

alright thanks alot for explaining so clearly.

cool..
Reputation Points: 10
Solved Threads: 0
Light Poster
salman213 is offline Offline
32 posts
since Jun 2008

This thread is solved

Either the thread starter or a moderator has marked this thread as solved. You can most likely trust the responses and answers given. There is most likely no reason for any further responses to be posted here. If you have a related question, please start a new thread in this forum instead.

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in C++ Forum Timeline: Matrix sum with returning array function
Next Thread in C++ Forum Timeline: MFC -- or "cWinThreads hate me"





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC