Ir para conteúdo
Fórum Script Brasil
  • 0

[DUVIDA/C] PONTEIROS & STRUCT


GabrielCardelli

Pergunta

18 respostass a esta questão

Posts Recomendados

  • 0

Estruturas servem para armazenar dados relacionados. É a base das Estruturas de Dados.

Por exemplo:

struct membro_scriptbrasil
{
    char *nome_de_exibicao, *login, *senha, *email;
    int id;
}
Você pode salvar estruturas diretamente num arquivo. Aí começa o básico de um banco de dados. :)
fwrite(&ponteiro_para_a_estruutra, sizeof(struct nome_da_estrutura), 1, fp);

http://www.ime.usp.br/~pf/algoritmos/aulas/stru.html

http://www.inf.ufpr.br/nicolui/grad/ci067/...Estruturas.html

http://www.sysprog.net/cstruct.html

Link para o comentário
Compartilhar em outros sites

  • 0

cara então struct seria um conjunto de variaveis? Não to conseguindo entender =/ malz

si fosse ql o objetivo disso?

struct data {
      int dia;
      int mes;
      int ano;
                  }

no caso seria uma declaração de variaveis com qlobjetivo?

Link para o comentário
Compartilhar em outros sites

  • 0

A grosso modo é isso, mesmo.

http://en.wikipedia.org/wiki/Struct

Por exemplo: consideremos uma função que exiba os valores de um vetor. Em C, não é possível saber o tamanho de um vetor, logo teríamos de fazer assim:

void exibe_vetor(int *vetor, int tamanho);

Usando uma struct, poder-se-ia fazer:

void exibe_vetor(struct vetor v);

onde struct vetor é:

struct vetor
{
    int *elementos;
    int tamanho;
}
Assim o tamanho do vertor está na estrutura. O loop para exibição ficaria assim:
for (i = 0; i < v.tamanho; i++)
{
    printf("%d\n", v.elementos[i]);
}

Link para o comentário
Compartilhar em outros sites

  • 0

olha eu entendi da seguinte forma

a struct serve pra no loca de eu sair colocando

int bola ( int a , int b ) ;

Eu crio uma struct pra ela..

struct gol {

int a;

int b;

e chamo?

int bola (struct gol)?

no lugar de int a , int b?

é isso?

E depois no caso suponto que a struct é gol ficaria

gol.a =

gol.b =

é assim?

Desculpa ta enchendo o saco mais eu n to entendendo mesmo essa parte

abraço

---------

Beraldo você já meche com C a muito tempo?
Editado por GabrielCardelli
Link para o comentário
Compartilhar em outros sites

  • 0
Desculpa ta enchendo o saco mais eu n to entendendo mesmo essa parte

Se tem dúvida, tem que perguntar.

Mas é sempre bom pesquisar antes, claro. às vezes acha-se a resposta mais rapidamente. :)

É quase isso. Você errou no protótipo da função. struct gol é um tipo, sendo necessário fazer assim:

tipo funcao(struct gol variavel);

Aí, na função,. use:

variavel.a

Dá para usar typedef. Aì vocÊ cria um tipo próprio e facilita a criação de variáveis do tipo struct gol.

Beraldo você já meche com C a muito tempo?

Não. Comecei no meio do ano, na faculdade (antes mexíamos com Pascal. Mas odiei essa linguagem - eu estava acostumado com PHP, que tem sintaxe derivada do C).

Mas já mexia com programação há alguns anos (três para ser mais exato). :)

Editado por Beraldo
Link para o comentário
Compartilhar em outros sites

  • 0

Bom agora entendi! vou estudar mais isto pôs tenho dificuldades!! tambem to com uma duvida de ponteiros outra hora eu posto!!

Muito obrigado!!

EU fiz a pergunta lá si mechia a muito tempo porque vejo que você responde todo mundo!! Parece ate que tem 30anos de profissão kkk³² brikz

Abraço

EDIT-------

Bom eu procurei no google mais não achei a resposta pra outra pergunta minha vou anexar aqui si alguém poder responder..

Qual a finalidade da utilização de structs? Não só complica o programa? podendo usar somente variaveis?

Editado por GabrielCardelli
Link para o comentário
Compartilhar em outros sites

  • 0

Na verdade, structs no geral são muito úteis.

Você pode guardar estas informações em um arquivo, passar em uma variável só etc.

Em minha opinião, facilitam em vez de complicar.

Exemplo simples:

Uma pessoa. Vamos dizer que você quer guardar em um array 50 pessoas.

Sem structs:

...
int main(void) {
    char nome[50][30], short int idade[50], char localidade[50][30];

    /* preenche uma pessoa */
    strcpy(nome[0], "Joao da Silva");
    strcpy(localidade[0], "são Paulo");
    idade[0] = 23;
    
    funcao(nome[0], idade[0], localidade[0]);

    return 0;
}
Com structs:
...

typedef struct {
    char nome[30];
    short int idade;
    char localidade[30];
} pessoa_t;

int main(void) {
    pessoa_t pessoas[50];
    
    strcpy(pessoas[0].nome, "Joao da Silva");
    strcpy(pessoas[0].localidade, "são Paulo");
    pessoas[0].idade = 23;
    
    funcao(&pessoas[0]);

    return 0;
}

No exemplo sem structs, é necessário separar uma pessoa em 3 variáveis, complicando o programa.

No exemplo com structs, as variáveis ficam "compactadas" em uma só, facilitando o acesso.

Vejo muitas outras vantagens ainda, como utilizar memcpy para copiar structs etc.

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0

pow cara belo exemplo!! deu pra sacar bem!!

Seria então pra 1 posição 3 localidades diferentes

pessoas[0].nome

|| .idade

|| . localidade

entendi então quando eu quiser guardar diversos dados ligados entre si eu guardo numa struct

Certo? como si fosse um formulario de cadastro que no final...

Eu só preciso imprimir o pessoas[0].

seria isso?

Editado por GabrielCardelli
Link para o comentário
Compartilhar em outros sites

  • 0

pessoas[0], não. Você tem que especificar a variável da struct que deseja imprimir. Por exemplo:

pessoas[0].nome

pessoas[0].idade

...

Concordo com o Durub que structs facilitam, não dificultam. :)

E vale lembrar que, em termos de memória, tanto faz colocar variáveis em structs ou isoladamente. O uso de memória é igual. Por exemplo:

int pos_x = 5
int pos_y = 7;
struct ponto
{
    int pos_x;
    int pos_y;
};

struct ponto var;

var.pos_x = 5;
var.pos_y = 7;

Esses dois exemplos ocupam o mesmo tamanho de memória.

Por isso não há desvantagem em usar structs.

Editado por Beraldo
Link para o comentário
Compartilhar em outros sites

  • 0

Bom fiz esse codigo porem ta dando erro alguém me ajuda?

#include <stdio.h>
#include <stdlib.h>
struct clients
       {
       char nome[30];
       int idade;
       } testando;
       
int main (void)
{
    
    testando client[10];
    int x;
    
    for (x=0;x<10;x++)
    {
    printf (" Digite o nome do cliente ");
    scanf ("%s", client[x].nome);
    printf (" Digite a idade ");
    scanf ("%s", client[x].idade);
    printf (" Cliente cadastrado: %s %s ", client[x].nome,client[x].idade)";
    }
    
system ("pause>null");
return (0);
}

Link para o comentário
Compartilhar em outros sites

  • 0

alguém me ajuda ta fogo ...

abaixo o codigo:

#include <stdio.h>
#include <stdlib.h>
/* - */
         int num,time=10000;
/* - */
struct cadastro_cli 
                    {
                char nome[30],cidade[30];
                int idade; 
                    };
/* - */
int main ()
{
             struct cadastro_cli cadastro[30];
    printf (" \n\n ");
    printf (" ------ PROGRAMA DE APRENDIZAGEM ------- ");
    printf (" \n\n ");
    printf (" ------ SEJA BEM VINDOS AO NOSSO SISTEMA ------- ");
    printf (" \n\n ");
    printf (" O QUE DESEJA FAZER ? ");
    printf (" \n\n ");
    printf ("[1]. CADASTRAR NOVA CONTA \n [2]. BUSCAR SEU SALDO \n [3]. MODIFICAR INFORMAÇÕES ");
    printf ("\n\n DIGITE O NUMERO: ");
    scanf ("%d",&num);
    system ("CLS");
    printf (" Aguarde... ");
    sleep (time);
    system ("CLS");
    while (num>1||num<4)
          if (num==1)
          {
                     printf (" OLA!!BEM VINDO AO PROGRAMA DE CADASTRAMENTO DE USUARIO.");
                     printf (" \n\n ");
                     printf (" Digite seu nome: ");
                     scanf ("%s",&cadastro.nome);
                     printf (" Digite sua idade: ");
                     scanf ("%d",&cadastro.idade);
                     printf (" Digite sua cidade: ");
                     scanf ("%s",&cadastro.cidade);
    return (0);
}

ta dando erro na struct =/

na linha do scanf cadastro.nome.

ta dando esse erro:

request for member 'nome' in somenthing not a structure or union

o que pode ser?

Abraço!

Link para o comentário
Compartilhar em outros sites

  • 0

cadastro é um vetor de struct cadastro_cli.

Logo, não faz sentido usar cadastro.nome, mas, sim, cadastro[indice].nome.

Outra coisa: não se usa & no scanf para string, já que uma string é um vetor e o nome da string é um ponteiro.

char nome[30];

scanf("%s", nome);

é preferível usar fgets() para pegar strings. Além de permitir espaços, não há como ocorrer estouru de buffer.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...