diff --git a/aulas/09-args/strlist.c b/aulas/09-args/strlist.c index 9815f13..36f7913 100644 --- a/aulas/09-args/strlist.c +++ b/aulas/09-args/strlist.c @@ -1,33 +1,84 @@ #include +void print_list(char *list[]); + +int main(void) { + + char *str[] = { + "carro", + "bola", + "peteca", + NULL + }; + + int i; + + // Iterando os caracteres de str[0] com notação de vetores multidimensionais... + i = 0; + while (str[0][i] != '\0') { + printf("str[0][%d] => %c\n", i, str[0][i]); + i++; + } + putchar('\n'); + + // Iterando caracteres de str[0] com aritmética de vetores... + i = 0; + while (*(str[0]+i) != '\0') { + printf("*(str[0]+%d) => %c\n", i, *(str[0]+i)); + i++; + } + putchar('\n'); + + // Iterando caracteres de str[0] com aritmética de ponteiros... + i = 0; + while (*(*str+i) != '\0') { + printf("*(*str+%d) => %c\n", i, *(*str+i)); + i++; + } + putchar('\n'); + + // Passando o endereço str[0] para um ponteiro... + char *uma_coisa = str[0]; + + // Iterando os caracteres no endereço com notação de subscrito... + i = 0; + while (uma_coisa[i] != '\0') { + printf("uma_coisa[%d] => %c\n", i, uma_coisa[i]); + i++; + } + putchar('\n'); + + // Iterando caracteres no endereço com aritmética de ponteiros... + i = 0; + while (*(uma_coisa+i) != '\0') { + printf("*(uma_coisa+%d) => %c\n", i, *(uma_coisa+i)); + i++; + } + putchar('\n'); + + // Passando o endereço de str para um "ponteiro para ponteiro para char"... + char **coisas = str; + + // Iterando o primeiro e os demais caracteres de cada string no endereço... + i = 0; + while (coisas[i] != NULL) { + printf("coisas[%d] => %c:%s\n", i, coisas[i][0], coisas[i]+1); + i++; + } + putchar('\n'); + + // Passando o endereço de str para uma função... + print_list(str); + + return 0; +} + void print_list(char *list[]) { int i = 0; while (list[i] != NULL) { - printf("[%d] => %s\n", i, list[i]); + printf("list[%d]: %p => %p: %s\n", i, &list[i], list[i], list[i]); i++; } } - -int main(void) { - - // Vetor de strings terminado com NULL... - - char *str[] = { - "banana", - "laranja", - "abacate", - (void *)0 /* NULL */ - }; - - print_list(str); - - // O vetor de argumentos (argv) é um vetor de strings - // terminado com um ponteiro nulo (NULL)... - - // print_list(envp); - - return 0; -} -