---
# System prepended metadata

title: C/C++ Interview Exam (阮泓璋 Jerry Juan)

---

C/C++ Interview Exam (阮泓璋 Jerry Juan)
=================================

1. Where in memory are the variables stored?

    * Global variables
    * Static variables
    * Constant data types
    * Local variables (declared and defined in functions)
    * Variables declared in *main* function
    * Dynamically allocated space

    ```
    Please answer here...
    * Global variables : stack
    * static variable : 
    * Constant data types : 
    * Local variables : stack
    * Variables declared in *main* function : stack
    * Dynamically allocated space : Heap
    * 
    ```

2. Are the following legal or illegal uses of const pointers? Which lines are illegal ones? What are the benefits of using const?

    ~~~c
    // Question 2
    const char *str = "hello";
    char c = *str;
    str++;
    *str = 'a';
    str[1] = 'b';
    ~~~
    
    ``
    Please answer here...
    str++ is illegal
    const str can not modify.
    ```

3. What is the output of the following program?

    ~~~c++
    // Question 3
    #include <iostream>

    class A
    {
    public:
        A(int n = 0)
            : m_n(n)
        {
            std::cout << 'd';
        }

        A(const A& a)
            : m_n(a.m_n)
        {
            std::cout << 'c';
        }

    private:
        int m_n;
    };

    void f(const A &a1, const A &a2 = A())
    {
    }

    int main()
    {
        A a(2), b;
        const A c(a), &d = c, e = b;
        b = d;
        A *p = new A(c), *q = &a;
        static_cast<void>(q);
        delete p;
        f(3);
        std::cout << std::endl;

        return 0;
    }
    ~~~
    ```
    Please answer here...
    dccdxcxx
    
    
    ```

4. Please write a function to shuffle a vector of integers.

    ~~~c++
    // Question 4
    #include <vector>
    #include <stdexcept>
    #include <iostream>

    class Shuffler
    {
    public:
        static void shuffle(std::vector<int>& sequence)
        {
            // TODO: Waiting to be implemented
            //get system time for  shffule condition
            if(sequence.size() == 0) return;
            
            system time = GetSystemTime();
            int nChangePos = time.second%sequence.size();
            
            int nCurEleVal , nNewElePos;
            
            for(int i=0 ; i < sequence.size() ; i++)
            {
                nNewElePos = (i + nChangePos)%sequence.size();
                
                nCurEleVal = sequence[nNewElePos];
                sequence[nNewElePos] = sequence[i];
                sequence[i] = nCurEleVal;
            }
        }
    };

    #ifndef RunTests
    int main()
    {
        std::vector<int> v = { 1, 2, 3, 4, 5, 6 };
        Shuffler::shuffle(v);
        return 0;
    }
    #endif
    ~~~
    

    

5. The following code is for inserting an element at the front of a list. Please correct it if you find anything inappropriate, and describe what you find. 

   ~~~c++
   struct IntElement
   {
       int data;
       IntElement *next;
   };
   
   bool insertInFront (IntElement *head, int data) {
       IntElement *newElem = new IntElement;
       if (!newElem) return false;

       newElem->data;
       head = newElem;

       return true;
   }
   ~~~

   ```
   Please describe what you find here ...
   
   //insert this line to set the next element
   newElem->next = head;
   
   //re-position the link list's first element
   head = newElem;
   ```

   ~~~c++
   // Please write the correct code here...
   
   bool insertInFront (IntElement *head, int data) {
       IntElement *newElem = new IntElement;
       if (!newElem) return false;

       newElem->data;
       newElem->next = head;
       head = newElem;

       return true;
   }
   

   
    
   
   
   
   
   
   ~~~
