/*
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)}
#include<iostream>usingnamespace std;voidincrement(int*n){//declare argument of the functon as pointer*n+=1;
cout<<"In function: "<<*n<<endl;}intmain(){int x=5;increment(&x);//passing the address of the variable to the function
cout<<"In main: "<<x<<endl;}
//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
// Here's a macro I use to define a type.// You're welcome to use it, but I'll also show how the type is defined.#defined_typedef_func_ty(return_z, name,...)typedefreturn_z(*name)(__VA_ARGS__);d_typedef_func_ty(int, int_2i_f,int,int);// creates a int(*)(int, int) function pointer// which is equivelant to the following:typedefint(*int_2i_f)(int,int);
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}