/*
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>
using namespace std;
int main()
{
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>
using namespace std;
void increment(int *n){ //declare argument of the functon as pointer
*n+=1;
cout<<"In function: "<<*n<<endl;
}
int main()
{
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 class in order to access object of derived class (Smart pointers)
// Variable is used to store value
int a = 5;
cout << a; //output is 5
// Pointer is used to store address of variable
int 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.
#define d_typedef_func_ty(return_z, name, ...) typedef return_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:
typedef int(*int_2i_f)(int, int);
// This will explain how pointers are used
#include <iostream>
using namespace std;
int main()
{
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;
return 0;
}
void simple_pointer_examples() {
int a; // a can contain an integer
int* 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
}