Array numbering starting from 0 instead of 1

Discussion in 'C++' started by bintom, Nov 8, 2008.

  1. bintom

    bintom Guest

    Hi!

    I teach C++ in schools in India. I don't have a good answer when
    students ask me why arrays in C++ are numbered from 0 to n-1 for an
    array of n elements. I hope somebody can tell me.

    Thanks
    Binoy
     
    bintom, Nov 8, 2008
    #1
    1. Advertising

  2. bintom

    Ian Collins Guest

    bintom wrote:
    > Hi!
    >
    > I teach C++ in schools in India. I don't have a good answer when
    > students ask me why arrays in C++ are numbered from 0 to n-1 for an
    > array of n elements. I hope somebody can tell me.
    >

    I guess one answer is because C does.

    Having started many years ago as an assembler programmer, I've always
    thought of arrays as pointers to memory. The offset of the first
    element is zero, which is the array index zero. Thus given

    char n[4];

    n+0 is equivalent to n[0];

    --
    Ian Collins
     
    Ian Collins, Nov 8, 2008
    #2
    1. Advertising

  3. bintom

    Salt_Peter Guest

    On Nov 8, 1:40 am, bintom <> wrote:
    > Hi!
    >
    > I teach C++ in schools in India. I don't have a good answer when
    > students ask me why arrays in C++ are numbered from 0 to n-1 for an
    > array of n elements. I hope somebody can tell me.
    >
    > Thanks
    > Binoy


    You have a stack of books on a table. The book at the bottom of the
    pile is 0 books away from the table, its offset is zero. The next book
    is a book away from the table, offset of 1.

    Humans invented the decimal system because we have 10 fingers, label
    each finger using a digit only. 10 is not a single digit.

    The best answer is one involving range. If you know you have 10 books
    then 10 is an upper limit:

    const int n = 10;
    books stack[n];

    for( int i = 0; i < n; ++i ) { /*do stuff*/ }

    Cover binary arithmetic, where a computer only has 0's and 1's. After
    all, a 0 has just as much weight that a binary 1 does.
    In the decimal system isn't the first decade 0 -> 9 ? How weird would
    it be to suggest that the first decade is 1 -> 10 and the second 11 ->
    20. If you would exclude 0 why not exclude 10 and 20 as well?

    Those languages that do use index 1->10 in an array[10] allocate 11
    elements and the first one is ignored / waisted.
     
    Salt_Peter, Nov 8, 2008
    #3
  4. bintom

    Rolf Magnus Guest

    bintom wrote:

    > Hi!
    >
    > I teach C++ in schools in India. I don't have a good answer when
    > students ask me why arrays in C++ are numbered from 0 to n-1 for an
    > array of n elements. I hope somebody can tell me.


    The reason why it's like that in C++: The array notion a is equivalent to *(a+b), where usually, a is the address of the array's first element, and b is the index. So if you want the first element, b must be 0. Basically, that's how all computers do it. So if you have a language that starts at 1, like e.g. Matlab does, the interpreter has to subtract 1 from every index or alternatively leave the first element blank.

    Generally, I'd rather ask why we tend to start counting at 1 instead of 0, but my guess is that this has historical reasons (for quite a long time, there was no number 0). Sometimes, however, we do count from 0, and sometimes, we even mx it up, like e.g. time. A day starts at hour 0, but a month starts at day 1. Kind of strange, isn't it?
     
    Rolf Magnus, Nov 8, 2008
    #4
  5. bintom

    Guest

    On 8 Nov, 06:52, Ian Collins <> wrote:
    > bintom wrote:
    > > Hi!

    >
    > > I teach C++ in schools in India. I don't have a good answer when
    > > students ask me why arrays in C++ are numbered from 0 to n-1 for an
    > > array of n elements. I hope somebody can tell me.

    >
    > I guess one answer is because C does.
    >
    > Having started many years ago as an assembler programmer, I've always
    > thought of arrays as pointers to memory.  The offset of the first
    > element is zero, which is the array index zero.  Thus given
    >
    > char n[4];
    >
    > n+0 is equivalent to n[0];


    To go back further - C is derived from BCPL. In BCPL, you can create
    an array as follows:

    LET V = VEC 5

    which would actually reserve an array of six members, from V!0 to V!5.
    (It uses "!" instead of "[]".) So you could start from 1, and ignore
    the first one; or start at 0 and ignore the last one; or start at 0
    and use a number in the VEC that was one less than the number you
    actually wanted. Presumably C and C++'s arrangement was supposed to be
    an improvement on this.
     
    , Nov 8, 2008
    #5
  6. bintom

    Stefan Ram Guest

    bintom <> writes:
    >I teach C++ in schools in India. I don't have a good answer when
    >students ask me why arrays in C++ are numbered from 0 to n-1 for an
    >array of n elements. I hope somebody can tell me.


    http://www.purl.org/stefan_ram/pub/zero
     
    Stefan Ram, Nov 8, 2008
    #6
  7. bintom

    James Kanze Guest

    On Nov 8, 9:47 am, Rolf Magnus <> wrote:
    > bintom wrote:


    > > I teach C++ in schools in India. I don't have a good answer
    > > when students ask me why arrays in C++ are numbered from 0
    > > to n-1 for an array of n elements. I hope somebody can tell
    > > me.


    > The reason why it's like that in C++: The array notion a is
    > equivalent to *(a+b), where usually, a is the address of the
    > array's first element, and b is the index. So if you want the
    > first element, b must be 0. Basically, that's how all
    > computers do it. So if you have a language that starts at 1,
    > like e.g. Matlab does, the interpreter has to subtract 1 from
    > every index or alternatively leave the first element blank.


    That's basically it. If you really want to make it clear,
    however, without going into the nitty-gritty of transforming []
    into * and +, consider "flatting" multidimensional arrays.
    Given an array with dimension [10][10], for example, map the
    indexes into those of an array [100]. With arrays based at 0,
    it's simple 10*i+j. With arrays based at 1, you have to
    subtract 1 from each index, then do the calcule, then add 1,
    e.g. 10*(i-1)+j (with more dimensions, the difference becomes
    even more apparent).

    > Generally, I'd rather ask why we tend to start counting at 1
    > instead of 0, but my guess is that this has historical reasons
    > (for quite a long time, there was no number 0).


    Counting makes sense: if you have one book, you have one, and
    not zero. It's indexing that doesn't, or rather ordinal
    numbers in general.

    --
    James Kanze (GABI Software) email:
    Conseils en informatique orientée objet/
    Beratung in objektorientierter Datenverarbeitung
    9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
     
    James Kanze, Nov 9, 2008
    #7
  8. Pascal J. Bourguignon, Nov 10, 2008
    #8
  9. bintom

    Bill Davy Guest

    It might make the pill easier to swallow if you mention that zero is one of
    India's great contribution to mathematics, along with a slew of famous
    mathematicians.


    "bintom" <> wrote in message
    news:...
    > Hi!
    >
    > I teach C++ in schools in India. I don't have a good answer when
    > students ask me why arrays in C++ are numbered from 0 to n-1 for an
    > array of n elements. I hope somebody can tell me.
    >
    > Thanks
    > Binoy
     
    Bill Davy, Nov 10, 2008
    #9
  10. On 8 Nov., 07:52, Ian Collins <> wrote:
    > bintom wrote:
    > > Hi!

    >
    > > I teach C++ in schools in India. I don't have a good answer when
    > > students ask me why arrays in C++ are numbered from 0 to n-1 for an
    > > array of n elements. I hope somebody can tell me.

    >
    > I guess one answer is because C does.
    >
    > Having started many years ago as an assembler programmer, I've always
    > thought of arrays as pointers to memory.  The offset of the first
    > element is zero, which is the array index zero.  Thus given


    As computers generally start counting at zero and for consistency, i
    allway to prefer to say that the first array element in array x is
    x[1]. x[0] is the zeroth element.

    >
    > char n[4];
    >
    > n+0 is equivalent to n[0];
    >
    > --
    > Ian Collins
     
    .rhavin grobert, Nov 10, 2008
    #10
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. buran

    numbering rows in datagrid

    buran, Jul 7, 2003, in forum: ASP .Net
    Replies:
    2
    Views:
    483
    Saravana
    Jul 7, 2003
  2. buran

    numbering rows in datagrid

    buran, Oct 15, 2003, in forum: ASP .Net
    Replies:
    1
    Views:
    537
    Cowboy \(Gregory A. Beamer\)
    Oct 15, 2003
  3. =?Utf-8?B?Q2hyaXM=?=

    form field auto numbering with unique value

    =?Utf-8?B?Q2hyaXM=?=, Dec 31, 2004, in forum: ASP .Net
    Replies:
    3
    Views:
    465
    John Saunders
    Jan 1, 2005
  4. Andy Fish
    Replies:
    2
    Views:
    469
    Andy Fish
    Apr 5, 2005
  5. Allan Cady
    Replies:
    0
    Views:
    463
    Allan Cady
    Apr 22, 2004
Loading...

Share This Page