This is CS50
Happy Birthday to Xochi! 🥳
cs50.ly/art
RGB
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 1 2 3 4 5 6 7 8 9 a b c d e f
hexadecimal
base-16
# #
161
160
# #
16
1
00
16
1
01
16
1
02
16
1
03
16
1
04
16
1
05
16
1
06
16
1
07
16
1
08
16
1
09
16
1
0A
16
1
0B
16
1
0C
16
1
0D
16
1
0E
16
1
0F
16
1
10
16
1
11
16
1
12
16
1
13
16
1
14
16
1
16
1
FF
16
1
FF
16
1
16 × F
1 × F
+
FF
16
1
16 × 15
1 × 15
+
FF
16
1
240
15
+
FF
16
1
255
F
1111
11111111
FF
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
| | | | | | | |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | A | B | C | D | E | F |
10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 1A | 1B | 1C | 1D | 1E | 1F |
| | | | | | | |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | A | B | C | D | E | F |
10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 1A | 1B | 1C | 1D | 1E | 1F |
| | | | | | | |
0x0 | 0x1 | 0x2 | 0x3 | 0x4 | 0x5 | 0x6 | 0x7 |
0x8 | 0x9 | 0xA | 0xB | 0xC | 0xD | 0xE | 0xF |
0x10 | 0x11 | 0x12 | 0x13 | 0x14 | 0x15 | 0x16 | 0x17 |
0x18 | 0x19 | 0x1A | 0x1B | 0x1C | 0x1D | 0x1E | 0x1F |
| | | | | | | |
int n = 50;
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | 50 n | |||
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | 50 0x123 | |||
| | | | | | | |
&
*
pointers
int n = 50;
int *p = &n;
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | 50 n | |||
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | 50 0x123 | |||
| | | | | | | |
| | | | | | | |
0x123 p | |||||||
| | | | | | | |
| | | | 50 0x123 | |||
| | | | | | | |
| | | | | | | |
0x123 p | |||||||
| | | | | | | |
| | | | 50 0x123 | |||
| | | | | | | |
| | | | | | | |
p | |||||||
| | | | | | | |
| | | | 50 0x123 | |||
| | | | | | | |
string
string s = "HI!";
| | | | | | | |
| |||||||
| | | | | | | |
| | | H | I | ! | \0 | |
| | | | | | | |
| | | | | | | |
| |||||||
| | | | | | | |
| | | H s[0] | I s[1] | ! s[2] | \0 s[3] | |
| | | | | | | |
| | | | | | | |
| |||||||
| | | | | | | |
| | | H 0x123 | I 0x124 | ! 0x125 | \0 0x126 | |
| | | | | | | |
| | | | | | | |
0x123 s | |||||||
| | | | | | | |
| | | H 0x123 | I 0x124 | ! 0x125 | \0 0x126 | |
| | | | | | | |
| | | | | | | |
s | |||||||
| | | | | | | |
| | | H 0x123 | I 0x124 | ! 0x125 | \0 0x126 | 0x127 |
| | | | | | | |
string s = "HI!";
string s = "HI!";
char *s = "HI!";
typedef struct
{
string name;
string number;
}
person;
typedef struct
{
string name;
string number;
}
person;
typedef struct
{
string name;
string number;
}
person;
typedef struct
{
string name;
string number;
}
person;
typedef int integer;
typedef int integer;
typedef int integer;
typedef char *string;
typedef char *string;
typedef char *string;
cs50.h
pointer arithmetic
pointer arithmetic
string
char *
break
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
s | | | | | | | | | |||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
s | | | | | | | | | |||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | H | I | ! | \0 | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
s | | | | | | | | | |||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | H 0x123 | I 0x124 | ! 0x125 | \0 0x126 | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
0x123 s | | | | | | | | | |||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | H 0x123 | I 0x124 | ! 0x125 | \0 0x126 | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
0x123 s | t | ||||||||||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | H 0x123 | I 0x124 | ! 0x125 | \0 0x126 | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
0x123 s | t | ||||||||||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | H 0x123 | I 0x124 | ! 0x125 | \0 0x126 | | | | | H | I | ! | \0 | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
0x123 s | t | ||||||||||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | H 0x123 | I 0x124 | ! 0x125 | \0 0x126 | | | | | H 0x456 | I 0x457 | ! 0x458 | \0 0x459 | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
0x123 s | 0x456 t | ||||||||||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | H 0x123 | I 0x124 | ! 0x125 | \0 0x126 | | | | | H 0x456 | I 0x457 | ! 0x458 | \0 0x459 | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
s | t | ||||||||||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | H 0x123 | I 0x124 | ! 0x125 | \0 0x126 | | | | | H 0x456 | I 0x457 | ! 0x458 | \0 0x459 | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
s | | | | | | | | | |||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
s | | | | | | | | | |||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | h | i | ! | \0 | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
s | | | | | | | | | |||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | h 0x123 | i 0x124 | ! 0x125 | \0 0x126 | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
0x123 s | | | | | | | | | |||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | h 0x123 | i 0x124 | ! 0x125 | \0 0x126 | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
0x123 s | t | ||||||||||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | h 0x123 | i 0x124 | ! 0x125 | \0 0x126 | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
0x123 s | 0x123 t | ||||||||||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | h 0x123 | i 0x124 | ! 0x125 | \0 0x126 | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
s | t | ||||||||||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | h 0x123 | i 0x124 | ! 0x125 | \0 0x126 | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
s | t | ||||||||||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | H 0x123 | i 0x124 | ! 0x125 | \0 0x126 | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
malloc
free
…
| | | | | | | | | | | | | | | |
s | | ||||||||||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | h 0x123 | i 0x124 | ! 0x125 | \0 0x126 | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
s | t | ||||||||||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | h 0x123 | i 0x124 | ! 0x125 | \0 0x126 | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
s | t | ||||||||||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | h 0x123 | i 0x124 | ! 0x125 | \0 0x126 | | | | | 0x456 | 0x457 | 0x458 | 0x459 | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
s | t | ||||||||||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | h 0x123 | i 0x124 | ! 0x125 | \0 0x126 | | | | | 0x456 | 0x457 | 0x458 | 0x459 | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
s | t | ||||||||||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | h 0x123 | i 0x124 | ! 0x125 | \0 0x126 | | | | | h 0x456 | 0x457 | 0x458 | 0x459 | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
s | t | ||||||||||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | h 0x123 | i 0x124 | ! 0x125 | \0 0x126 | | | | | h 0x456 | i 0x457 | 0x458 | 0x459 | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
s | t | ||||||||||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | h 0x123 | i 0x124 | ! 0x125 | \0 0x126 | | | | | h 0x456 | i 0x457 | ! 0x458 | 0x459 | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
s | t | ||||||||||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | h 0x123 | i 0x124 | ! 0x125 | \0 0x126 | | | | | h 0x456 | i 0x457 | ! 0x458 | \0 0x459 | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
s | t | ||||||||||||||
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | h 0x123 | i 0x124 | ! 0x125 | \0 0x126 | | | | | H 0x456 | i 0x457 | ! 0x458 | \0 0x459 | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
NULL
valgrind
garbage values
int main(void)
{
int *x;
int *y;
x = malloc(sizeof(int));
*x = 42;
*y = 13;
y = x;
*y = 13;
}
int main(void)
{
int *x;
int *y;
x = malloc(sizeof(int));
*x = 42;
*y = 13;
y = x;
*y = 13;
}
int main(void)
{
int *x;
int *y;
x = malloc(sizeof(int));
*x = 42;
*y = 13;
y = x;
*y = 13;
}
int main(void)
{
int *x;
int *y;
x = malloc(sizeof(int));
*x = 42;
*y = 13;
y = x;
*y = 13;
}
int main(void)
{
int *x;
int *y;
x = malloc(sizeof(int));
*x = 42;
*y = 13;
y = x;
*y = 13;
}
int main(void)
{
int *x;
int *y;
x = malloc(sizeof(int));
*x = 42;
*y = 13;
y = x;
*y = 13;
}
int main(void)
{
int *x;
int *y;
x = malloc(sizeof(int));
*x = 42;
*y = 13;
y = x;
*y = 13;
}
int main(void)
{
int *x;
int *y;
x = malloc(sizeof(int));
*x = 42;
*y = 13;
y = x;
*y = 13;
}
void swap(int a, int b)
{
}
void swap(int a, int b)
{
int tmp = a;
a = b;
b = tmp;
}
void swap(int a, int b)
{
int tmp = a;
a = b;
b = tmp;
}
scope
↑
stack
machine code
↑
stack
machine code
globals
heap
↓
↑
stack
machine code
globals
heap
↓
↑
stack
machine code
globals
heap
↓
↑
stack
machine code
globals
heap
↓
↑
stack
machine code
globals
heap
↓
↑
stack
↑
stack
void swap(int a, int b)
{
int tmp = a;
a = b;
b = tmp;
}
main
main
swap
main
x
y
1
x
2
y
1
x
2
y
swap
a
b
tmp
1
x
2
y
1
a
2
b
tmp
1
x
2
y
int tmp = a;
a = b;
b = tmp;
1
a
2
b
tmp
1
x
2
y
int tmp = a;
a = b;
b = tmp;
1
a
2
b
1
tmp
1
x
2
y
int tmp = a;
a = b;
b = tmp;
2
a
2
b
1
tmp
1
x
2
y
int tmp = a;
a = b;
b = tmp;
2
a
1
b
1
tmp
1
x
2
y
2
a
1
b
1
tmp
1
x
2
y
1
x
2
y
void swap(int a, int b)
{
int tmp = a;
a = b;
b = tmp;
}
void swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
1
x
2
y
a
b
tmp
1
x
2
y
int tmp = *a;
*a = *b;
*b = tmp;
a
b
tmp
1
x
2
y
int tmp = *a;
*a = *b;
*b = tmp;
a
b
1
tmp
1
x
2
y
int tmp = *a;
*a = *b;
*b = tmp;
a
b
1
tmp
2
x
2
y
int tmp = *a;
*a = *b;
*b = tmp;
a
b
1
tmp
2
x
1
y
a
b
1
tmp
2
x
1
y
2
x
1
y
void swap(int a, int b)
{
int tmp = a;
a = b;
b = tmp;
}
void swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
machine code
globals
heap
↓
↑
stack
heap
↓
↑
stack
heap overflow
stack overflow
buffer overflow
get_char
get_double
get_float
get_int
get_long
get_string
...
scanf
...
file I/O
BMP