iagoac / mc202

Disciplina MC202 - Estruturas de Dados
GNU General Public License v3.0
17 stars 13 forks source link

substituindo um 'char' em uma variável de tipo qualquer. #107

Closed ianloron00 closed 3 years ago

ianloron00 commented 4 years ago

Boa tarde,

Gestaria de saber se existe alguma maneira de criar um 'char' para substituir como outra variável de outro tipo.

para islustrar, fiz um código (que nao funciona) mas que representaria o que pretendo fazer.

`#include <stdio.h>
#include <stdlib.h>

typedef struct node 
{
    int value;
} node;

typedef struct node * p_node;

int main ()
{
    char ref[] = "value";

    p_node head = malloc(sizeof(node));

/* substituiria 'ref' por 'value' */
    head->ref = 3;

    printf("head->value %d ref %s\n", head->value, ref);

    free (head);

    return 0;
}`

Atte,

carlosecb commented 4 years ago

Que eu saiba, C não tem nenhum recurso pronto pra isso. Um jeito é fazer um if (strcmp(ref, "value")) head->value = 3; Ou coisa do tipo. Se quiser uma linguagem parecida com C que consegue fazer isso, pesquise pela linguagem D e o seu recurso mixin.

iagoac commented 4 years ago

Em C, as variáveis são fortemente tipadas. Desta forma, uma variável de um tipo (char, por exemplo) não pode se comportar como outro (intou float, por exemplo).

A dica do @carlosecb também funciona, mas você não consegue converter qualquer vetor de chars para int (pois é necessário verificar cada valor inteiro um por um).
O que você pode utilizar, neste caso, é a função atoi. Esta converte uma string (um vetor de chars) para um inteiro. Aqui neste mesmo fórum nós já discutimos sobre ela.

enoque commented 4 years ago

Eu demorei bastante tempo pra entender o que tu queria, mas finalmente entendi. Provavelmente o pessoal não entendeu também pq responderam um pouco diferente do que era esperado (ou interpretei totalmente errado).

Em C, pelo que sei, não dá pra fazer exatamente o que tu quer (talvez até dê e eu não saiba). O que dá pra fazer (que sei) é passar uma função por parâmetro e fazer o código usar a função que tu quer (ponteiro para função).

Acho que pra tu fazer essa pergunta tu deve ter visto isso em outra linguagem (eu vi isso em python), fazendo tipo:

p = print

p("hello world ")