mirror of
https://gitlab.com/blau_araujo/cblc.git
synced 2025-05-10 10:36:37 -03:00
Compare commits
7 commits
48b4393585
...
34efb5e18b
Author | SHA1 | Date | |
---|---|---|---|
34efb5e18b | |||
20dcd9c3ea | |||
167e6c0751 | |||
88d08cab14 | |||
5c66f0e140 | |||
b7b146aefa | |||
183af0896e |
8 changed files with 139 additions and 111 deletions
|
@ -30,4 +30,4 @@ qualquer distribuição.
|
||||||
- 26.03.2025 [[./aulas/06-vetores/README.org][Aula 6: Vetores]] ([[https://youtu.be/W5TGNQYFs4E][vídeo]]) ([[./exercicios/06/README.org][exercícios]])
|
- 26.03.2025 [[./aulas/06-vetores/README.org][Aula 6: Vetores]] ([[https://youtu.be/W5TGNQYFs4E][vídeo]]) ([[./exercicios/06/README.org][exercícios]])
|
||||||
- 28.03.2025 [[./aulas/07-vps/README.org][Aula 7: Vetores, ponteiros e strings]] ([[https://youtu.be/hhySl3ClTLE][vídeo]]) ([[./exercicios/07/README.org][exercícios]])
|
- 28.03.2025 [[./aulas/07-vps/README.org][Aula 7: Vetores, ponteiros e strings]] ([[https://youtu.be/hhySl3ClTLE][vídeo]]) ([[./exercicios/07/README.org][exercícios]])
|
||||||
- 31.03.2025 [[./aulas/08-processos/README.org][Aula 8: Processos e layout de memória]] ([[https://youtu.be/60bXYVCFoTI][vídeo]]) (sem exercícios)
|
- 31.03.2025 [[./aulas/08-processos/README.org][Aula 8: Processos e layout de memória]] ([[https://youtu.be/60bXYVCFoTI][vídeo]]) (sem exercícios)
|
||||||
- 04.04.2025 [[./aulas/09-args/README.org][Aula 9: Argumentos e ambiente]] ([[][vídeo]]) (exercícios)
|
- 04.04.2025 [[./aulas/09-args/README.org][Aula 9: Argumentos e ambiente]] ([[https://youtu.be/uufnW60rg2Q][vídeo]]) (exercícios)
|
||||||
|
|
|
@ -6,9 +6,9 @@
|
||||||
|
|
||||||
* Aula 9: Argumentos e ambiente
|
* Aula 9: Argumentos e ambiente
|
||||||
|
|
||||||
[[][Vídeo desta aula]]
|
[[https://youtu.be/uufnW60rg2Q][Vídeo desta aula]]
|
||||||
|
|
||||||
** Vetores de strings
|
** Vetores e strings
|
||||||
|
|
||||||
#+begin_src c
|
#+begin_src c
|
||||||
char str[] = "banana";
|
char str[] = "banana";
|
||||||
|
@ -32,8 +32,7 @@ o tamanho da string e seu nome avalia o endereço do primeiro caractere.
|
||||||
|
|
||||||
*** Vetores de "ponteiros"
|
*** Vetores de "ponteiros"
|
||||||
|
|
||||||
Embora a classificação popular induza enganos, um vetor de /ponteiros/ é,
|
Um vetor de /ponteiros/ é um ponteiro para um vetor de endereços:
|
||||||
na verdade, um ponteiro para vetores de um dado tipo:
|
|
||||||
|
|
||||||
#+begin_src c
|
#+begin_src c
|
||||||
int d1[] = {1,2,3};
|
int d1[] = {1,2,3};
|
||||||
|
|
|
@ -1,22 +1,23 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
// Imprime listas de strings...
|
||||||
void print_list(char *list[]) {
|
void print_list(char *list[]);
|
||||||
int i = 0;
|
|
||||||
while (list[i] != NULL) {
|
|
||||||
printf("[%d] => %s\n", i, list[i]);
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
|
|
||||||
// O vetor de argumentos (argv) é um vetor de strings
|
for (int i = 0; i < argc; i++)
|
||||||
// terminado com um ponteiro nulo (NULL)...
|
printf("argv[%d] = %s\n", i, argv[i]);
|
||||||
|
|
||||||
print_list(argv);
|
print_list(argv);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void print_list(char *list[]) {
|
||||||
|
int i = 0;
|
||||||
|
while (list[i] != NULL) {
|
||||||
|
printf("[%d] => %p => %s\n", i, list[i], list[i]);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,22 +1,33 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
extern char **environ;
|
||||||
|
|
||||||
|
void print_list(char *list[]);
|
||||||
|
|
||||||
|
int main(int argc, char **argv, char **envp) {
|
||||||
|
|
||||||
|
// Listando ponteiro 'environ'...
|
||||||
|
print_list(environ);
|
||||||
|
putchar('\n');
|
||||||
|
|
||||||
|
// Função getenv...
|
||||||
|
char *env = getenv("SHELL");
|
||||||
|
printf("env = %s\n", env);
|
||||||
|
putchar('\n');
|
||||||
|
|
||||||
|
// Listando parâmetro 'envp'...
|
||||||
|
print_list(envp);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void print_list(char *list[]) {
|
void print_list(char *list[]) {
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while (list[i] != NULL) {
|
while (list[i] != NULL) {
|
||||||
printf("[%d] => %s\n", i, list[i]);
|
printf("[%d] => %p => %s\n", i, list[i], list[i]);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char **argv, char **envp) {
|
|
||||||
|
|
||||||
// O vetor de ambiente (envp) é um vetor de strings
|
|
||||||
// terminado com um ponteiro nulo (NULL)...
|
|
||||||
|
|
||||||
print_list(envp);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
|
|
||||||
void print_list(char *list[]);
|
|
||||||
|
|
||||||
|
|
||||||
int main(void) {
|
|
||||||
/*
|
|
||||||
Os vetores de argumentos e de ambiente
|
|
||||||
são listas de strings terminadas com NULL:
|
|
||||||
|
|
||||||
NULL = (void *)0
|
|
||||||
*/
|
|
||||||
char *str_list[] = {
|
|
||||||
"banana",
|
|
||||||
"laranja",
|
|
||||||
"abacate",
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
print_list(str_list);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void print_list(char *list[]) {
|
|
||||||
int i = 0;
|
|
||||||
while (list[i]) {
|
|
||||||
printf("[%d] => %s\n", i, list[i]);
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
void print_list(char *list[]) {
|
|
||||||
int i = 0;
|
|
||||||
while (list[i] != NULL) {
|
|
||||||
printf("[%d] => %s\n", i, list[i]);
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Para informar que 'environ' existe...
|
|
||||||
extern char **environ;
|
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
|
||||||
|
|
||||||
print_list(environ);
|
|
||||||
|
|
||||||
// printf("environ[0] => %p => %s\n", environ[0], environ[0]);
|
|
||||||
|
|
||||||
// char *env = getenv("SHELL");
|
|
||||||
// printf("getenv(\042SHELL\042) => %p => %s\n", env, env);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
25
aulas/09-args/slides.c
Normal file
25
aulas/09-args/slides.c
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
|
||||||
|
char str1[] = "carro";
|
||||||
|
char str2[] = "bola";
|
||||||
|
char str3[] = "peteca";
|
||||||
|
|
||||||
|
char *lista[] = {str1, str2, str3};
|
||||||
|
|
||||||
|
char *pstr1 = str1;
|
||||||
|
char **plista = lista;
|
||||||
|
|
||||||
|
printf("str1 -> %p = %s\n", str1, str1);
|
||||||
|
printf("str2 -> %p = %s\n", str2, str2);
|
||||||
|
printf("str3 -> %p = %s\n", str3, str3);
|
||||||
|
|
||||||
|
printf("lista[2] -> %p = %p\n", &lista[2], lista[2]);
|
||||||
|
printf("lista[1] -> %p = %p\n", &lista[1], lista[1]);
|
||||||
|
printf("lista[0] -> %p = %p\n", &lista[0], lista[0]);
|
||||||
|
|
||||||
|
printf("*pstr1 -> %p = %p\n", &pstr1, pstr1);
|
||||||
|
printf("**plista -> %p = %p\n", &plista, plista);
|
||||||
|
|
||||||
|
}
|
|
@ -1,33 +1,84 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
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[]) {
|
void print_list(char *list[]) {
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while (list[i] != NULL) {
|
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++;
|
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue