Arguments and pointers

This commit is contained in:
Leonora Tindall 2019-03-13 23:43:31 -05:00
parent 1cf4a8c67e
commit 48249f9fee
Signed by: nora
GPG Key ID: 99041B68DBC02DAC
2 changed files with 72 additions and 2 deletions

12
01-arguments.c Normal file
View File

@ -0,0 +1,12 @@
#include <stdio.h>
int main(int argc, char** argv) {
printf("Given %d arguments.\n", argc);
int index = 0;
while (index < argc) {
printf("Argument %d: %s\n", index, argv[index]);
index = index + 1;
}
}

View File

@ -143,7 +143,65 @@ printf("Hello, world!\n");
``` ```
This calls the `printf` function, which `print`s a `f`ormatted string, although we're This calls the `printf` function, which `print`s a `f`ormatted string, although we're
not using any of the formatting options here. not using any of the formatting options here. The `\n` is a standin for the newline
character.
Congratulations! This is your first C program~ Congratulations! This is your first C program, and demonstrates that your development
environment is working.
# Pointers and Looping
In a file called `01-arguments.c`, write:
```c
#include <stdio.h>
int main(int argc, char** argv) {
printf("Given %d arguments.\n", argc);
int index = 0;
while (index < argc) {
printf("Argument %d: %s\n", index, argv[index]);
index = index + 1;
}
}
```
This is pretty similar, but has a few more complications.
```c
printf("Given %d arguments.\n", argc);
```
Here, `%d` means "replace this placeholder with the first argument after the string,
which should be an integer". `d` stands for digit.
```c
int index = 0;
```
This is the declaration of a variable "index", which will be used to keep track of our
place in the array.
```c
while (index < argc) {
```
This means run the following code until the `index` variable becomes greater than or equal
to `argc`, the number of command line arguments.
```c
printf("Argument %d: %s\n", index, argv[index]);
```
This line has a few new things in it; `%s` is the placeholder for strings, and `argv[index]`
is taking looking at the `index`th element in `argv`, an array of strings.
Or, you can look at it a different way: `argv` is a `char**`, a `*` (pointer) to a `*` (pointer)
to a `char`. A "pointer" is simply an **unsigned integer** which represents, instead of a
number, a location in memory.
So, `char** argv` is the memory location of the first element in a list of pointers, each
of which is the memory location of the first element in a list of `char`s. Those lists of
`char`s all end with `\0`, the 0 byte, and represent the text of the program's command
line arguments.