mith College
Computer Science
Dominique Thiébaut [email protected]
CSC231Week 12— Introduction to C
Fall 2019
Pointers
Computer Science Dominique Thiebaut
Concept
Computer Science Dominique Thiebaut
x6.5
0FFF1F0A
px
RAM
Concept
Computer Science Dominique Thiebaut
x6.5
0FFF1F0A
px
RAM
Example: Initialize an Array
Computer Science Dominique Thiebaut
Using
indexing
3 4 1 9 3 4 6 6 1 0
0 1 2 3 4 5 6 7 8 9
A
Example: Initialize an Array
Computer Science Dominique Thiebaut
Using
indexing
Example: Initialize an Array
Computer Science Dominique Thiebaut
3 4 1 9 3 4 6 6 1 0
0 1 2 3 4 5 6 7 8 9
A
Using
pointers
Computer Science Dominique Thiebaut
Using
pointers
Example: Initialize an Array
./a.outp=0x7fff88d54560 A[0] = 0.00 *p = 0.00p=0x7fff88d54564 A[1] = 1.00 *p = 1.00p=0x7fff88d54568 A[2] = 2.00 *p = 2.00p=0x7fff88d5456c A[3] = 3.00 *p = 3.00p=0x7fff88d54570 A[4] = 4.00 *p = 4.00p=0x7fff88d54574 A[5] = 5.00 *p = 5.00p=0x7fff88d54578 A[6] = 6.00 *p = 6.00p=0x7fff88d5457c A[7] = 7.00 *p = 7.00p=0x7fff88d54580 A[8] = 8.00 *p = 8.00p=0x7fff88d54584 A[9] = 9.00 *p = 9.00
Computer Science Dominique Thiebaut
We Stopped HereLast Time
https://farm1.staticflickr.com/44/145211107_f2020ec804_z.jpg
We Stopped HereLast Time
Why is fib3() soslow?
https://visualgo.net/en/recursion
(see
fib3.c
on marrax)
Outline• Pointers
• Array
• Functions
• Input/Output (IO)
• Dynamic Variables
• File IO
• Multi-File Projects
Pointers: Quick Review
Computer Science Dominique Thiebaut
x6.5
0FFF1F0A
px
RAM
Arrays
Computer Science Dominique Thiebaut
v[0]
6.5
0FFF1F00
pv
pv+1
pv+2
pv+3
v[1]
v[2]
v[3]
0FFF1F04
0FFF1F08
0FFF1F0C
0FFF1F10
Arrays
• The name of an array is a pointer to the first cell of the array.
• name is the same as &(name[0])
Computer Science Dominique Thiebaut
* and &• * has two meanings, depending on context
• “Pointer to”
• “Contents of”
• Similarly, & means “the address of” or the “binary and”-operator
Computer Science Dominique Thiebaut
* and &
Computer Science Dominique Thiebaut
Computer Science Dominique Thiebaut
Exercise• Write a C program that copies Array A into Array B using indexing first, and then using pointers.
getcopy C/copyArrays.c
Exercise• Write a C program that finds the largest integer in Array A, using pointers.
Computer Science Dominique Thiebaut
Functions
Computer Science Dominique Thiebaut
Functions
• Functions are normally declared before they are used
• Functions can return values of simple types (int, char, floats), and even pointers.
• Functions get parameters of simple types, and pointers.
• Passing by value is automatic. Passing by reference requires passing a pointer.
Computer Science Dominique Thiebaut
Back to Assembly…x dd 3
push dword[x] call f1 …
f1: push ebb mov ebp, esp inc dword[ebp+8] … ret 4
z = 30z = 11sum( 11, 22) = 33
Computer Science Dominique Thiebaut
Example 1
z = 30x = 11
Example 2 (Incomplete code… Add missing elements!)
Computer Science Dominique Thiebaut
z = 30x = 11
Example 2 (Incomplete code… Add missing elements!)
Computer Science Dominique Thiebaut
Pass
by Reference!
Complete the code
shown here
Computer Science Dominique Thiebaut
getcopy C/decrementArray.c
Exercise
Exercise
Computer Science Dominique Thiebaut
• Write a C program that uses functions to find the largest integer in A. The result is passed back using a return statement.
Exercise
• Write another program that does the same thing but the max is passed back by reference.
Computer Science Dominique Thiebaut
Input/OutputIO
Input From User
Computer Science Dominique Thiebaut
(cont’d)
a.outEnter your name, please: MickeyEnter your age: 21Enter your version of pi: 3.14159Mickey is 21 years old, and thinks pi is 3.1415901184
Computer Science Dominique Thiebaut
Dynamic Variables
Computer Science Dominique Thiebaut
• Dynamic: think "new" in Java
• malloc() = Memore Allocation for new data structure
Computer Science Dominique Thiebaut
RAM
Computer Science Dominique Thiebaut
user
pro
g
malloc()
user
pro
g
malloc()
RAM
Computer Science Dominique Thiebaut
OperatingSystem
RAM
Computer Science Dominique Thiebaut
OperatingSystem
dyn
user
pro
g
malloc()
RAM
Computer Science Dominique Thiebaut
OperatingSystem
dyn
(void*) p
user
pro
g
malloc()
RAM
Computer Science Dominique Thiebaut
OperatingSystem
dyn
(void*) p
p
user
pro
g
malloc()
Computer Science Dominique Thiebaut
getcopy C/malloc1.c
Malloc
Exercise• Modify the previous program that computed the
max of an array, but this time you allocate the array dynamically, with numbers provided by the user.
Computer Science Dominique Thiebaut
sizeof()can be tricky…
Computer Science Dominique Thiebaut
sizeof ()
Computer Science Dominique Thiebaut
sizeof(A) = 20sizeof(A[0]) = 4sizeof(B) = 8sizeof(B[0]) = 4sizeof(p) = 8sizeof(*p) = 4sizeof(name) = 14strlen(name) = 13sizeof(a) = 4sizeof(x) = 4
sizeof ()
Computer Science Dominique Thiebaut
sizeof(A) = 20sizeof(A[0]) = 4sizeof(B) = 8sizeof(B[0]) = 4sizeof(p) = 8sizeof(*p) = 4sizeof(name) = 14strlen(name) = 13sizeof(a) = 4sizeof(x) = 4
Different!sizeof ()
Computer Science Dominique Thiebaut
File IO
File I/O: Output
Computer Science Dominique Thiebaut
C/fileIOOutput.c
File I/O: Input
Computer Science Dominique Thiebaut
C/fileIOInput.c
Computer Science Dominique Thiebaut
File I/O: Reading Ints [~handout] cat fileOfInts.txt 41 2 34 5 67 8 910 11 12
Computer Science Dominique Thiebaut
File I/O: Reading Ints
C/fileIOReadNumbers.c
Computer Science Dominique Thiebaut
[~handout] gcc fileIOReadNumbers.c[~handout] a.out1, 2, 34, 5, 67, 8, 910, 11, 12
File I/O: Reading Ints
Exercise• Write a program that reads the file data.txt, which
has the number of ints it contains on the first line, then one int per line for the rest of the file. Your program must use a dynamic array to store the numbers, and find the max of the array, and print it.
Computer Science Dominique Thiebaut