/*
Here is how pointers work in a nustshell(represent | as what's
happening in the memory and / as a place in the ram):
int x = 2; | 2/0x00ef5
int *z = &x| 0x00ef5/0x00ef6 (See how the value of the pointer z
matches with the memory address of x? that's how they work!)
when you print out the pointer as *n (replace n with the var name)
it will actually look at the value
see it's a memory address
go to that memory address
and print the value originally in the memory address which is 2
Here is code:
*/int x =5;int*y =&x;
cout <<*y+1;/*
the reason why i did *y+1 was so to show that after it got
the value from the memory address it will add 1
*/
#include<iostream>usingnamespace std;intmain(){int x=5;int*ptr=&x;
cout<<&x<<endl;//prints the address of the variable (x)
cout<<ptr<<endl;//prints the address of the variable (x)
cout<<*ptr<<endl;//prints the value of x(5)
cout<<&ptr<<endl;//prints the address of the pointer (ptr)}
//why do we use pointers:1)pass values by refrence to a function
2)return multiple values from a function
3)use pointers in combinational with arrays
4)dynamic memory allocation
5)use pointers in a base classin order to access object of derived class(Smart pointers)
#include<iostream>intmain(){int* ptr =newint{};// creates null initialized pointer ptrdelete ptr;// must be cleared manually// multiple memaddress allocation:int* p_arr =newint[5]{};/*
new int[] returns the first elems pointer address
{} initializes with default settings [int{} -> 0], such as MyObj()
[5] -> can be var too, new functionality in modern cpp (new int[var_count])
*/delete[] p_arr;}
// Variable is used to store valueint a =5;
cout << a;//output is 5// Pointer is used to store address of variableint a =5;int*ab;
ab =&a;//& is used get address of the variable
cout << ab;// Output is address of variable
string food ="Pizza";// A food variable of type string
cout << food;// Outputs the value of food (Pizza)
cout <<&food;// Outputs the memory address of food (0x6dfed4)
// This will explain how pointers are used#include<iostream>usingnamespace std;intmain(){int a =5;//Declare and initialize a variable/*
The following pointer declarations are all valid and they all are doing the same:
Declaring a new pointer and initializing it with 0 (a non accessible memory address) for safety-reasons.
int * b = 0;
int* b = 0
int *b = 0; // This is how its usually written.
int *b; // <= this, however would cause "b" to point to some random address which might be unsafe.
*/int*b =0;// Create a new pointer of type int and initialize it with 0
cout <<""b" is initialized and now pointing to memory-address: "<< b << endl << endl;//Now make the pointer "point" to the address of a
b =&a;//"b" now points to the address of "a"
cout <<""a" is stored at memory-address: "<<&a << endl;
cout <<""b" is stored at memory-address: "<<&b << endl;
cout <<""b" is pointing to memory-address now: "<< b << endl << endl;
cout <<"The value of "a" is: "<< a << endl;// returns the value of a//the "*b" will get the value from the address b points to (the value of a)
cout <<"The value of the area "b" is pointing to is: "<<*b << endl << endl << endl;//Now modify the value of the address "b" is pointing to...effectively changing the value of "a" *b=10;
cout <<""a" is still stored at memory-address: "<<&a << endl;
cout <<""b" is still stored at memory-address: "<<&b << endl;
cout <<""b" is still pointing to memory-address: "<< b << endl << endl;
cout <<"The value of "a" is now: "<< a << endl;// returns the value of a
cout <<"The value of the area "b" is pointing to is now: "<<*b << endl << endl;return0;}
voidsimple_pointer_examples(){int a;// a can contain an integerint* x;// x can contain the memory address of an integer. char* y;// y can contain the memory address of a char.
Foo* z;// z can contain the memory address of a Foo object.
a =10;
x =&a;// '&a' extracts address of a
std::cout << x << std::endl;// memory address of a => 0x7ffe9e25bffc
std::cout <<*x << std::endl;// value of a => 10}