mirror of
https://github.com/jackyzha0/quartz.git
synced 2025-12-26 14:24:05 -06:00
56 lines
1.3 KiB
Markdown
56 lines
1.3 KiB
Markdown
---
|
|
title: "09-intro-to-c-2"
|
|
aliases:
|
|
tags:
|
|
- cosc204
|
|
---
|
|
|
|
# Variables and Pointers
|
|
|
|
```
|
|
va memory[3]
|
|
*va memory[memory[3]]
|
|
**va memory[memory[memory[3]]]
|
|
```
|
|
|
|
`*` is known as **dereferncing**
|
|
`**` is known as **double-dereferncing**
|
|
|
|
## Names and places
|
|
names are allocated to emmory locations of declaration
|
|
|
|
`&b;` wherever in memory b is stored
|
|
|
|
## Why Pointers
|
|
- abstractions
|
|
- dont need to know which "object" to manipulate
|
|
- ability to change a parameter
|
|
- multiple return values from a routine
|
|
- efficiency
|
|
- dont need to copy anything to pass a pointer
|
|
|
|
## Call by value
|
|
- The value of the variable is passed to the called routine.
|
|
- changes to the parameter do not propogate to the caller
|
|
|
|
## Call by address
|
|
- address of parameter is passed to the rountine
|
|
- changes do propogate back to the caller
|
|
- more efficient because we only need to pass a pointer and not a value
|
|
|
|
### Multiple results
|
|
- c routine can return at most one value
|
|
- you can use input parameters which are pointers for "returning" results
|
|
|
|
### Arrays
|
|
- strings
|
|
- terminated by "\0"
|
|
- argc, argv[]
|
|
- length specified
|
|
- null terminated
|
|
- array of pointers
|
|
|
|
### Pointer arithmetic
|
|
- ++ move a pointer fowards in an array
|
|
- -- move a pointer back in an array
|
|
- these operations are "type aware" and increment (the pointer) by the size of the elements of the array |