Jump to content
Leudassdf

[Resolvido] Duvida com estrutura

Recommended Posts

Leudassdf

Boas pessoal,

Eu tentei fazer isto:

#include <stdio.h>
#include <stdlib.h>
struct item{
int element;
};
void modify_item(){
struct item *C;
printf("%d\n",C[0].element);
}
int main(){
  struct item *C;
   if ((C = malloc(1 * (sizeof(struct item)))) == NULL) {
   }
  C[0].element=10;
  printf("%d\n",C[0].element);
  modify_item();
  return 0;

}

O que eu queria era: no main dimensionava a estrutura item para um tamanho que neste caso e 1. No entanto este tamanho sera para mudar. Depois eu atribuo um valor ao element da estrutura e depois queria aceder ao elemento que esta na posição 0 e mostrar/alterar o seu valor.

No entanto o código que tenho em cima está incorreto. Nao devolve o valor 10 que devia devolver, ou melhor o valor que eu queria que o programa devolvesse.

Cumprimentos

Um Bom Ano Novo

Share this post


Link to post
Share on other sites
thoga31

Retira o modify_item e funciona.

O que pretendes com esse modify_item? Isso vai dar Access Violation, de certeza. Dentro dessa função, C não tem dimensão nem valor, portanto aceder ao índice 0 é inválido.


Knowledge is free!

Share this post


Link to post
Share on other sites
Leudassdf

Retira o modify_item e funciona.

O que pretendes com esse modify_item? Isso vai dar Access Violation, de certeza. Dentro dessa função, C não tem dimensão nem valor, portanto aceder ao índice 0 é inválido.

o objetivo é la estar o modify_item.

eu chamando a funçao modify_item deveria conseguir aceder ao valor 10 que declarei no main.

Fiz-me entender?

Share this post


Link to post
Share on other sites
Knitter

Se não passares o valor para dentro da variável nunca vais conseguir aceder. As funções têm acesso ao que recebem através dos parâmetros ou ao que elas próprias declaram, nada mais.

Share this post


Link to post
Share on other sites
ricardo93

Muito provavelmente queres algo como isto:

#include <stdio.h>
#include <stdlib.h>
struct item{
int element;
};
void modify_item(struct item *C){
printf("%d\n",C[0].element);
}
int main(){
  struct item *C;
if ((C = malloc(1 * (sizeof(struct item)))) == NULL) {
}
  C[0].element=10;
  printf("%d\n",C[0].element);
  modify_item(C);
  return 0;

}
 

Share this post


Link to post
Share on other sites
Leudassdf

Muito provavelmente queres algo como isto:

#include <stdio.h>
#include <stdlib.h>
struct item{
int element;
};
void modify_item(struct item *C){
printf("%d\n",C[0].element);
}
int main(){
  struct item *C;
if ((C = malloc(1 * (sizeof(struct item)))) == NULL) {
}
  C[0].element=10;
  printf("%d\n",C[0].element);
  modify_item©;
  return 0;

}

Sim é isto. Obrigado.

No entanto a funcao modify_item tem um simbolo de copyright em vez de modify_item©.

Mas deu para perceber.

So mais uma duvida.

eu ao chamar a funcao, modify_item© estou a passar uma copia da estrutura?

Não pois não?

Share this post


Link to post
Share on other sites
thoga31

Esse símbolo apareceu por parvoíce do editor, que substitui "( + C + )" pelo símbolo de Copyright :P

Tem atenção às variáveis, como foi dito, a função X só tem acesso às variáveis que declara, aos seus argumentos e às variáveis globais. Sabendo que C está na main, então modify_item não lhe consegue aceder. Tem de ser passada como argumento, como foi indicado. ;)

Um Bom Ano Novo!

Uma cópia da estrutura toda não. Estás a passar a referência do primeiro elemento.


Knowledge is free!

Share this post


Link to post
Share on other sites
pwseo

Leudassdf,

Recomendo vivamente que revejas os teus conhecimentos de C. Em posts paralelos andas a discutir self-referencing structs e threads, e no entanto cometes um erro como o que te levou a criar este tópico, um erro básico que tem a ver com o scope de variáveis num programa; parece que estás a tentar aprender C à força, sem teres a noção de como uns temas dependem de outros.

Todas as casas com má fundação acabam por ruir -- isto aplica-se perfeitamente à programação, por isso tem atenção à forma como estás a tentar aprender C.

  • Vote 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.