//Para compilar use //gcc -pedantic-errors -Wall .c -o #include //calcula (p + q) e calcula (p - q) void soma_e_sub(int p, int q, int *soma, int *sub){ *soma = p + q; *sub = p - q; return; } //calcula a soma dos elementos de um arranjo de tamanho n int soma(int *V, int n){ int s = 0; for(int i = 0; i < n; i++){ s = s + V[i]; } return s; } int main(int argc, char * argv[]){ int x = 5; int y = 7; int z; int w; //Estamos passando os endereços de z e w, para que a funcao //soma_e_sub escreva nelas o valor da soma e da subtracao soma_e_sub(x, y, &z, &w); printf("z (soma) = %d\n", z); printf("w (sub) = %d\n", w); //Um arranjo (ou array, ou vetor) eh um bloco de memoria //continuo que tem espaco suficiente para guardar todos //os dados. Nesse exemplo os dados saum 4 inteiros. int X[4]; //Note que X[0] é o primeiro valor desse arranjo, que //nesse momento pode ter qualquer lixo de memoria jah //que naum foi inicializado. //Entretanto "X" sozinho guarda o endereco de memoria //do bloco. Dessa forma ele eh um ponteiro para um inteiro //(nesse caso para o inteiro X[0]). int *P = X; *P = 10; //Obviamente esse tipo de atribuicaum eh um pouco //obscura e deve ser evitada na pratica printf("X[0] = %d\n", X[0]); //populando os demais valores do arranjo X X[1] = 20; X[2] = 35; X[3] = -5; printf("Soma = %d\n", soma(X, 4)); int* px = &x; //o que as linhas abaixo iraum imprimir? printf("px %p\n", (void *) px); printf("na var apontada por px %d\n", *px); *px = 10; //e a proxima? printf("x = %d\n", x); x = w; w = 15; //e essa? printf("x = %d\n", x); //Cuidado para nao escrever em uma variavel que naum existe. //por exemplo a duas linhas abaixo estaum erradas, pois //pa tem algum lixo de memoria e naum um endereco de uma //variavel inteira vahlida. //int *pa; //*pa = 9; int *pa; pa = px; *pa = 9; //agora sim, o que serah impresso? printf("na var apontada por pa %d\n", *pa); return 0; }