Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

c++ what is "pointer = new type" as opposed to "pointer = new type []"?

In many tutorials, the first code samples about dynamic memory start along the lines of:

int * pointer;
pointer = new int;        // version 1
//OR
pointer = new int [20];    // version 2

They always proceed to explain how the second version works, but totally avoid talking about the first version.

What I want to know is, what does pointer = new int create? What can I do with it? What does it mean? Every tutorial without fail will avoid talking about the first version entirely. All I've found out (through messing about) is this:

#include <iostream>

using namespace std;

int main()
{
    int * pointer;
    pointer = new int;
   pointer[2] = 1932;   // pointer [2] exists? and i can  assign to it?!
   cout << pointer[2] << endl;      // ... and access it successfully?!
};

The fact that I can subscript pointer tells me so far that pointer = new int implicitly creates an array. But if so, then what size is it?

If someone could help clear this all up for me, I'd be grateful...

like image 880
code shogan Avatar asked May 18 '11 11:05

code shogan


People also ask

What is new in pointer?

The new operator doesn't allocate reference types because they're not objects. The new operator can't be used to allocate a function, but it can be used to allocate pointers to functions. The following example allocates and then frees an array of seven pointers to functions that return integers.

What does * and &indicate in pointer?

The fundamental rules of pointer operators are: The * operator turns a value of type pointer to T into a variable of type T . The & operator turns a variable of type T into a value of type pointer to T .

Is pointer similar to array?

In simple words, array names are converted to pointers. That's the reason why you can use pointers to access elements of arrays. However, you should remember that pointers and arrays are not the same. There are a few cases where array names don't decay to pointers.

Why create a different type of pointers for a different type of variables?

Because the type of a pointer tells the compiler that at a time on how many bytes you can perform the operation. Example: in case of char , only one byte. And it may be different in case of int of two bytes.


1 Answers

My teacher explained it like this.
Think of cinema. The actual seats are memory allocations and the ticket you get are the pointers.

int * pointer = new int;

This would be a cinema with one seat, and pointer would be the ticket to that seat

pointer = new int [20] 

This would be a cinema with 20 seats and pointer would be the ticket to the first seat. pointer[1] would be the ticket to the second seat and pointer[19] would be the ticket to the last seat.

When you do int* pointer = new int; and then access pointer[2] you're letting someone sit in the aisle, meaning undefined behaviour

like image 69
default Avatar answered Oct 06 '22 01:10

default