/*
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)
}
//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)
#include <iostream>
int main()
{
int* ptr = new int{};
// creates null initialized pointer ptr
delete ptr; // must be cleared manually
// multiple memaddress allocation:
int* p_arr = new int[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 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
int *ptr;
int arr[5];
// store the address of the first
// element of arr in ptr
ptr = arr;
///////// same as above
int *ptr;
int arr[5];
ptr = &arr[0];
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)
#include <stdio.h>
int main()
{
int var = 5;
printf("var: %d
", var);
// Notice the use of & before var
printf("address of var: %p", &var);
return 0;
}
// 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
}