C: como passar estrutura pra função usando ponteiros

Abaixo, um exemplo, sobre como passar uma estrutura de dados para uma função.

Ao receber a estrutura a função f() faz modificações nessa estrutura.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// a estrutura. *d vai guardar somente o endereço do bloco de letras,
// não as letras, as letras vão tá na memória em algum lugar, essa
// variável vai conter algo como 0x123123123 que é o endereço da
// primeira letra, ou seja o A.
struct st{ int a; int b; int c; char *d; };

// recebe somente o endereço da estrutura
void f( struct st *ptr ){
	unsigned int i,j=-1;
	char *txt;

        // modificando informações da estrutura, dentro da função!
	ptr->a = 11;
	ptr->b = 22;
	ptr->c = 33;

	int from=65;
	int to=90;
	int total = to - from;

        // vamos gravar as letras, portanto alocar memória
	txt = malloc( total * sizeof(char) + 1 ); // +1 é para o NULL no final.
	memset( txt, 0, total * sizeof(char) ); // zerando a memória
        // gravando as letras no buffer.
	for( i = from; i < to; i++ ){
                // via gravar o código do carater no endereço de txt[0]...
		memset( &txt[++j], i, sizeof(char) );
	}
	ptr->d = txt; // atribuindo o texto com as letras na estrutura
}

int main(int argc, const char *argv[]){
	struct st s; // nossa estrutura vai se chamar s
        // modificações que serão perdiads, pois serão alteradas na f()
	s.a = 1;
	s.b = 2;
	s.c = 3;
	f( &s ); // passando somente o endereço da estrutura para f()
        // veja que os valores serão os que foi gravado na função
	fprintf(stderr,"a=%d b=%d c=%d\nd=%s\n\n", s.a, s.b, s.c, s.d );
	return 0;
}
  • Share/Bookmark

Post a Comment

Your email is never shared. Required fields are marked *

*
*