Olá Pessoal!
Baixei um código-fonte da internet e me deparei com um operador que eu nunca tinha visto...
->
No código esta assim:
SYSCTL -> RCGC2 |= 0xFF;
Alguém poderia me explicar o por que?
Att.
Cefas escreveu:Olá Pessoal!
Baixei um código-fonte da internet e me deparei com um operador que eu nunca tinha visto...
->
No código esta assim:
SYSCTL -> RCGC2 |= 0xFF;
Alguém poderia me explicar o por que?
Att.
RobL escreveu:O Rodrigo_P_A não é somente Dr em C como detem a prática do C, assim como também é Dr em colocar o Forum asm51 em perfeito estado.
Como foi surpresa esse código com a seta, e estou cheio de tarefas, mas cansado, vou tentar ir um pouco para trás, pois sou eterno aprendiz em C e vivo me acidentando com ponteiros.
Como você sabe, uma struct é um tipo complexo de dados.
Diferente de um Vetor (matriz) que só tem um tipo de dado, por exemplo, somente inteiro, somente char, etc, uma struct pode conter todos os tipos de dados definidos em C. Um exemplo clássico nos livros é um cadastro de cliente, ou em microP um grupo de registros de uma Uart, do timer, etc. A vantagem é que ficarão agrupados em uma região da memória. Nenhuma outra variável, que você definir posteriormente, vai entrar no meio deles, estragando a sequencia dos seus membros.
Numa matriz, todos os membros são de um só tipo. Os dados ficarão agrupados e sequencialmente arrumados na memoria. Por exemplo um char sem sinal, ficará um byte após o outro. Você acessa cada byte usando o indice da matriz.
No caso da struct, os seus membros tem tipos diferentes, "tamanhos diferentes". Uma struct é uma "caixa" onde você guarda vários tipos de dados agrupados numa região da memo, por que isto lhe interessa naquele grupo de variáveis.
Exemplo: uma estrutura com 3 membros, um unsigned char, int, uint32_t cada um com um nome da variável:
typedef struct
{
char baite;
int inteiro;
uint32_t bits32 ;
} tipo_struct ;
Acima nossa "caixa " com as 3 variáveis guardadas dentro.
Vamos definir um tipo do mesmo tipo dessa struct, com o nome UmNome.
tipo_struct UmNome ; //UmNome é uma struct do tipo tipo_struct com 3 membros.
Vamos acessar um membro, o membro baite e fazer a operação OR do seu exemplo:
UmNome.baite |= 0xFF ; // o membro(variável) baite da estrutura de UmNome ficou com todos seus bits setados.
Note o ponto (intervalo) e não a seta entre eles.
Vamos fazer o mesmo com a seta:
tipo_struct *ptr ; // ptr é um ponteiro do tipo tipo_struct
Agora vamos apontar esse ponteiro para a struct UmNome:
ptr = UmNome ;
Vamos fazer a mesma operação acima com esse ponteiro para o membro baite:
ptr -> baite |= 0xFF ;//o membro(variável)de nome baite da estrutura UmNome, ficou com todos seus bits setados.
Quando se usa ponteiros para acessar um membro de uma struct em vez do ponto, usa-se a seta -> .
Passível de erro. Verificar.
Voltar para Visual C++/C/C++/C#
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante