+Nozes Arvozes Na verade não precisa especificar que é português, irá rodar normalmente. é só deixar as aspas duplas vazia entre elas, ficando (LC_ALL, " ");
Infelizmente não. C não tem esse recurso. O Padrão C11 tem o comando _Generic, que permitiria fazer uma gambiarra para saber o tipo: stackoverflow.com/questions/6280055/how-do-i-check-if-a-variable-is-of-a-certain-type-compare-two-types-in-c
@Linguagem C Programação Descomplicada tem como descobrir o tipo do ponteiro? typeof(p) funciona? ai eu poderia colocar *(typeof(p)*)p? minha ideia era usar algo tipo assim fread(p,sizeof(*(tipo*)p),1,arq2); mas eu n sei qual struct vou receber
Existem casos em que vc não sabe previamente o tipo do ponteiro necessário. Por exemplos, as funções malloc, calloc e realloc nao sabem para que será usada a memória alocada, nem o tipo de ponteiro que irá receber o endereço da memória alocada, então sempre devolvem um ponteiro genérico.
Se eu colocar : void *pp; pp=&x printf("Endereco em pp: %d ", pp); //endereço de x printf("Endereco em pp: %p ", pp); //endereço de x O que aparece na tela é diferente, qual a diferença de usar %d e %p no printf?
acho está diferente porque vc não colocou o *(int*)antes do pp, Testei seu código e coloquei e deu certo #include #include main() { void *pp; int x; pp=&x; printf("Endereco em pp: %d ", *(int*)pp); /*endereço de x*/ printf("Endereco em pp: %p ", *(int*)pp); /*endereço de x*/ }
@@barolubar1534 Converte, só no printf, nesse caso. /// Essa entrada no printf que a Larissa fez, há 4 anos, ela esqueceu dos asteriscos (*). Era pra ser: *(int*)pp)
suas aulas ESTÃO ME SALVANDO no conteúdo. Muito obrigado!
Melhor professor de linguagem C que já vi. Tem o dom de simplificar o complexo. Seus alunos serão os melhores programadores.
Que seremos nós, com essas aulas, rs :)
só pra constar, estou usando #include e depois de int main setlocale(LC_ALL,"Portuguese"); Assim consigo acenturar e usar "ç".
+Nozes Arvozes Na verade não precisa especificar que é português, irá rodar normalmente. é só deixar as aspas duplas vazia entre elas, ficando (LC_ALL, " ");
fodastica essa aula
Valeu!
Tem como em C descobrir um tipo em tempo de execução, como o JavaScript faz usando operador typeof ?
Infelizmente não. C não tem esse recurso. O Padrão C11 tem o comando _Generic, que permitiria fazer uma gambiarra para saber o tipo: stackoverflow.com/questions/6280055/how-do-i-check-if-a-variable-is-of-a-certain-type-compare-two-types-in-c
Ambos os valores são equivalentes, porém a notação está em diferentes bases, %p está em hexadecimal e %d em decimal.
Obrigada :)
Valeu Sheldon
Sheldon hahahahahahahahahahhaha
@
Linguagem C Programação Descomplicada Qual é a diferença de usar %p e %d no printf?
%d: impressão de inteiros
%p: impressão de ponteiros
@@progdescomplicada Obrigado pela explicação ^.^
@Linguagem C Programação Descomplicada tem como descobrir o tipo do ponteiro? typeof(p) funciona?
ai eu poderia colocar *(typeof(p)*)p?
minha ideia era usar algo tipo assim
fread(p,sizeof(*(tipo*)p),1,arq2); mas eu n sei qual struct vou receber
Até onde eu sei, não há como saber o tipo.
Qual seria a vantagem de usar um ponteiro genérico em vez de um específico?
Existem casos em que vc não sabe previamente o tipo do ponteiro necessário. Por exemplos, as funções malloc, calloc e realloc nao sabem para que será usada a memória alocada, nem o tipo de ponteiro que irá receber o endereço da memória alocada, então sempre devolvem um ponteiro genérico.
@@progdescomplicada Muito obrigada, professor!
Se eu colocar :
void *pp;
pp=&x
printf("Endereco em pp: %d
", pp); //endereço de x
printf("Endereco em pp: %p
", pp); //endereço de x
O que aparece na tela é diferente, qual a diferença de usar %d e %p no printf?
acho está diferente porque vc não colocou o *(int*)antes do pp, Testei seu código e coloquei e deu certo
#include
#include
main()
{
void *pp;
int x;
pp=&x;
printf("Endereco em pp: %d
", *(int*)pp); /*endereço de x*/
printf("Endereco em pp: %p
", *(int*)pp); /*endereço de x*/
}
@@larisseamorim5883 no caso colocando int significa converter o ponteiro genérico para o tamanho int, ou seja, para 4 bytes?
@@barolubar1534 Converte, só no printf, nesse caso. /// Essa entrada no printf que a Larissa fez, há 4 anos, ela esqueceu dos asteriscos (*). Era pra ser: *(int*)pp)
4:13 o que ele disse?
Que tem apenas o endereço onde o dado armazenado começa, mas não o tipo do dado apontado pelo ponteiro.
Cara vc desenha a memoria torta, eu me sinto desconfortavel com isso kkkk
aff...
KKKKKKKK boa
Obrigado!