Duvida ponteiro facil [RESOLVIDO]

1. Duvida ponteiro facil [RESOLVIDO]

Bruna Almeida
FennFelis

(usa Ubuntu)

Enviado em 22/08/2012 - 22:16h

opa, declarei um ponteiro dinamico assim.

int *p;
p=(int*)malloc(10*sizeof(int));
//Eu sei que o ponteiro *p == p[10]
//quando eu uso bzero(), eu devo colocar 10*sizeof(int) no segundo parametro para zerar todas posições de p?
//OBS: bzero(), zera o primeiro argumento



  


2. MELHOR RESPOSTA

Georgio
gfonseca

(usa Fedora)

Enviado em 23/08/2012 - 11:12h

Olá.
Não sou muito conhecedor de linguagem C, mas pelo que pude entender a função bzero() atribui o valor "0" para n posições de uma string (char *s).
Sendo assim você não precisa usar " sizeof (char) * 10 ", apenas " bzero(string, 10); " para informar que você pretende preencher 10 posições da string com o valor 0.


3. Re: Duvida ponteiro facil [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 23/08/2012 - 22:44h

FennFelis escreveu:

opa, declarei um ponteiro dinamico assim.

int *p;
p=(int*)malloc(10*sizeof(int));
//Eu sei que o ponteiro *p == p[10]
//quando eu uso bzero(), eu devo colocar 10*sizeof(int) no segundo parametro para zerar todas posições de p?
//OBS: bzero(), zera o primeiro argumento


Não sei se você foi muito feliz com a afirmação "*p == p[10]". Numa expressão, *p (que significa "conteúdo da posição de memória indicada por 'p'") é equivalente, isso sim, a p[0] (que significa "a partir da posição de memória indicada por 'p', desloque-se '0' elementos e use o conteúdo da posição de memória resultante").

Aliás, se você alocou um bloco de dez posições, elas residem em p[0] a p[9]. Usar p[10] é um erro.

Dito isso, você passar para bzero() o tamanho total em bytes da área alocada, e tal tamanho é exatamente o mesmo que você passa a malloc().

No entanto, acho pertinente você saber duas coisas: (1) bzero() não faz parte da bblioteca padrão, de modo que não é encontrado em todos os sistemas, e mesmo no mundo UNIX tal função é considerada obsoleta: em lugar de "bzero(p, tamanho)", deve-se preferir "memset(p, 0, tamanho)"; e (2) se você quiser alocar memória e logo em seguida zerar a região alocada, pode se interessante usar calloc() (como exemplo de uso, veja que os dois códigos abaixo são equivalentes, mas o primeiro é mais sucinto e quiçá mais elegante).

int *p;
p=calloc(num_elementos, sizeof (*p));


int *p;
p=malloc(num_elementos*sizeof (*p));
if(p!=NULL){
memset(p, 0, num_elementos*sizeof (*p));
}



4. Re: Duvida ponteiro facil [RESOLVIDO]

Bruna Almeida
FennFelis

(usa Ubuntu)

Enviado em 25/08/2012 - 02:44h

paulo1205 escreveu:

FennFelis escreveu:

opa, declarei um ponteiro dinamico assim.

int *p;
p=(int*)malloc(10*sizeof(int));
//Eu sei que o ponteiro *p == p[10]
//quando eu uso bzero(), eu devo colocar 10*sizeof(int) no segundo parametro para zerar todas posições de p?
//OBS: bzero(), zera o primeiro argumento


Não sei se você foi muito feliz com a afirmação "*p == p[10]". Numa expressão, *p (que significa "conteúdo da posição de memória indicada por 'p'") é equivalente, isso sim, a p[0] (que significa "a partir da posição de memória indicada por 'p', desloque-se '0' elementos e use o conteúdo da posição de memória resultante").

Aliás, se você alocou um bloco de dez posições, elas residem em p[0] a p[9]. Usar p[10] é um erro.

Dito isso, você passar para bzero() o tamanho total em bytes da área alocada, e tal tamanho é exatamente o mesmo que você passa a malloc().

No entanto, acho pertinente você saber duas coisas: (1) bzero() não faz parte da bblioteca padrão, de modo que não é encontrado em todos os sistemas, e mesmo no mundo UNIX tal função é considerada obsoleta: em lugar de "bzero(p, tamanho)", deve-se preferir "memset(p, 0, tamanho)"; e (2) se você quiser alocar memória e logo em seguida zerar a região alocada, pode se interessante usar calloc() (como exemplo de uso, veja que os dois códigos abaixo são equivalentes, mas o primeiro é mais sucinto e quiçá mais elegante).

int *p;
p=calloc(num_elementos, sizeof (*p));


int *p;
p=malloc(num_elementos*sizeof (*p));
if(p!=NULL){
memset(p, 0, num_elementos*sizeof (*p));
}


Sim, fui infeliz ao dizer q *p == p[10] quis exatamente dizer que apontava pro endereco que comecaria em p[0] a p[9], um vetor de 10 posicoes quando se declara estatico na main..
So queria saber mesmo qual era o tamanho que eu deveria passar na funcao bzero();


5. Re: Duvida ponteiro facil [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 27/08/2012 - 02:40h

Só para observar: a mesnagem marcada como "melhor resposta" está ERRADA, pois o tamanho indicado não corresponde ao tamanho alocado.



  



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts