Skip to main content
Engineering LibreTexts

3.2.1: Arrays in C++ (continued)

  • Page ID
    39219
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)

    ( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\id}{\mathrm{id}}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\kernel}{\mathrm{null}\,}\)

    \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\)

    \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\)

    \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    \( \newcommand{\vectorA}[1]{\vec{#1}}      % arrow\)

    \( \newcommand{\vectorAt}[1]{\vec{\text{#1}}}      % arrow\)

    \( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vectorC}[1]{\textbf{#1}} \)

    \( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)

    \( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)

    \( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)

    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)

    Facts about Array in C/C++:

    • Accessing Array Elements:
      Array elements are accessed by using an integer index. Array index starts with 0 and goes till size of array minus 1.

    How an array is laid out in memory

     

    #include <iostream> 
    using namespace std; 
    int main() 
    { 
        int arr[5]; 
        arr[0] = 5; 
        arr[2] = -10; 
        // this is same as arr[1] = 2 
        arr[3 / 2] = 2; 
        arr[3] = arr[0]; 
        cout << arr[0] << " " << arr[1] << " " << arr[2] << " " << arr[3]; 
        return 0; 
    } 
    
    • Output:
      5 2 -10 5
      
    • No Index Out of bound Checking:
      There is no index out of bounds checking in C/C++, for example, the following program compiles fine but may produce unexpected output when run.
    // This C++ program compiles fine 
    // as index out of bound 
    // is not checked in C. 
    #include <iostream> 
    using namespace std; 
    int main() 
    { 
        int arr[2]; 
        cout << arr[3] << " "; 
        cout << arr[-2] << " "; 
        return 0; 
    } 
    

    Output: these are just meaningless values as its just whatever is sitting in memory locations relative to the array.

    2008101287 4195777
    

    In C, it is not compiler error to initialize an array with more elements than the specified size. For example, the below program compiles fine and shows just Warning.

    #include <stdio.h> 
    int main() 
    { 
        // Array declaration by initializing it with more 
        // elements than specified size. 
        int arr[2] = { 10, 20, 30, 40, 50 }; 
        return 0; 
    } 
    

    Warnings:

    prog.c: In function 'main':
    prog.c:7:25: warning: excess elements in array initializer
      int arr[2] = { 10, 20, 30, 40, 50 };
                             ^
    prog.c:7:25: note: (near initialization for 'arr')
    prog.c:7:29: warning: excess elements in array initializer
      int arr[2] = { 10, 20, 30, 40, 50 };
                                 ^
    prog.c:7:29: note: (near initialization for 'arr')
    prog.c:7:33: warning: excess elements in array initializer
      int arr[2] = { 10, 20, 30, 40, 50 };
                                     ^
    prog.c:7:33: note: (near initialization for 'arr')

    Note: The program won’t compile in C++. If we save the above program as a .cpp, the program generates compiler error error: too many initializers for ‘int [2]'”.

    • The elements are stored at contiguous memory locations
    // C++ program to demonstrate that array elements 
    // are stored contiguous locations 
    #include <iostream> 
    using namespace std; 
    int main() 
    { 
        // an array of 10 integers. If arr[0] is stored at 
        // address x, then arr[1] is stored at x + sizeof(int) 
        // arr[2] is stored at x + sizeof(int) + sizeof(int) 
        // and so on. 
        int arr[5], i; 
        cout << "Size of integer in this compiler is " << sizeof(int) << "\n"; 
        for (i = 0; i < 5; i++) 
            // The use of '&' before a variable name, yields 
            // address of variable. 
            cout << "Address arr[" << i << "] is " << &arr[i] << "\n"; 
        return 0; 
    } 
    

    Output:

    Size of integer in this compiler is 4
    Address arr[0] is 0x7ffd636b4260
    Address arr[1] is 0x7ffd636b4264
    Address arr[2] is 0x7ffd636b4268
    Address arr[3] is 0x7ffd636b426c
    Address arr[4] is 0x7ffd636b4270

    Adapted From:
    "Arrays in C/C++" by sameer2209Geeks for Geeks is licensed under CC BY-SA 4.0


    3.2.1: Arrays in C++ (continued) is shared under a not declared license and was authored, remixed, and/or curated by LibreTexts.

    • Was this article helpful?