Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
c [2019/07/09 22:49] paul [Mutable] |
c [2020/10/23 02:53] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== C and C++ ====== | ====== C and C++ ====== | ||
+ | ===== C declerations ===== | ||
+ | |||
+ | A c decleration can be read by following this rule and knowing about precedence. | ||
+ | |||
+ | Go left when you can and right when you must. | ||
+ | |||
+ | < | ||
+ | char *(*(**foo [][8])())[]; | ||
+ | </ | ||
+ | |||
+ | foo is an array to an array of 8 pointers to poiners to a function that returns | ||
+ | a pointer to an array of pointers to char | ||
+ | |||
+ | ===== C++ Interview questions ===== | ||
+ | |||
+ | I was given a pop quiz by a non-tech interviewer once on c++. Here was his questions: | ||
+ | |||
+ | - What is the name of an invalid pointer? | ||
+ | - Weird question and I don't think it's right. Answer he was looking for was null. | ||
+ | - What is the difference between a struct and a class? | ||
+ | - What is the keyword to deallocate memory? Lol | ||
+ | - When using a new keyword where is the memory stored, stack or heap? Heap OBVI. | ||
+ | - If a program crashes and you have a core dump and debugger, what is the first thing you do? | ||
+ | - Look at a backtrace, see where the program crashed, look at what the variable were. | ||
===== General C++ ===== | ===== General C++ ===== | ||
Line 80: | Line 104: | ||
This way you can use a macro expansion in a if else statement with no curly braces | This way you can use a macro expansion in a if else statement with no curly braces | ||
where more than one statement would mess stuff up. | where more than one statement would mess stuff up. | ||
+ | |||
+ | ===== C Declerations ===== | ||
+ | |||
+ | First, understand the breakdown of a decleration in c. | ||
===== Rule of Three ===== | ===== Rule of Three ===== | ||
Line 124: | Line 152: | ||
An '' | An '' | ||
- | < | + | < |
// pair::pair example | // pair::pair example | ||
#include < | #include < | ||
Line 174: | Line 202: | ||
function. | function. | ||
- | < | + | < |
std:: | std:: | ||
myMap.insert(std:: | myMap.insert(std:: | ||
Line 180: | Line 208: | ||
===== Memory Leaks ===== | ===== Memory Leaks ===== | ||
+ | |||
For every new there must be a delete. Use the following valgrind command to | For every new there must be a delete. Use the following valgrind command to | ||
Line 213: | Line 242: | ||
Example: | Example: | ||
- | < | + | < |
int array[5] = { 1, 2, 3, 4, 5 }; | int array[5] = { 1, 2, 3, 4, 5 }; | ||
for (int& x : array) | for (int& x : array) | ||
x *= 2; | x *= 2; | ||
</ | </ | ||
+ | |||
===== Debugging ===== | ===== Debugging ===== | ||
Line 239: | Line 269: | ||
- | === Mutable === | + | ===== Mutable |
'' | '' | ||
Line 280: | Line 310: | ||
ret | ret | ||
</ | </ | ||
+ | |||
+ | ==== Pointer Syntax ==== | ||
+ | |||
+ | |||
+ | <code cpp> | ||
+ | |||
+ | Does not declare 3 pointers - it is one pointer and 2 objects. | ||
+ | |||
+ | <code cpp> | ||
+ | sf::Sprite* unfortunately does not apply to all the variables declared following it, just the first. It is equivalent to | ||
+ | |||
+ | sf::Sprite* re_sprite_hair; | ||
+ | sf::Sprite re_sprite_body; | ||
+ | sf::Sprite re_sprite_eyes; | ||
+ | </ | ||
+ | |||
+ | You want to do: | ||
+ | |||
+ | <code cpp> | ||
+ | sf::Sprite *re_sprite_hair, | ||
+ | </ | ||
+ | |||
+ | ===== Smart Pointers ===== | ||
+ | |||
+ | The STL library provides three types of "smart pointers", | ||
+ | |||