Como comparar valores em um array?

Pessoal, tenho um algorítmo que realiza a comparação de expressões regulares, dando uma introdução a análise sintática em C. Mas estou tendo problemas no momento da comparação pois os valores esperados não são retornados. Na verdade, as coisas não são comparadas corretamente e o retorno é nulo.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

static char *expressoes[] = {"print", "open", "close"};
static char *acao[] = {"imprime um valor.", "abre um requerimento.", "fecha um requerimento."};

int verificar_expressao(char*);
char *retorna_acao(int);

int main(){
    printf("Analisador de Expressões\n");
    while(true){
        printf(">> ");
        char *palavra;
        scanf(palavra);
        int valor = verificar_expressao(palavra);
        char *desc = retorna_acao(valor);
        printf("Expressão: ");
        printf(expressoes[valor]);
        printf(" -> ");
        printf(desc);
        printf("\n");
        printf("---------------------------\n");
    }
    return 0;
}

int verificar_expressao(char *palavra){
    int k;
    int i;
    for(i = 0;i < sizeof(expressoes)/sizeof(expressoes[0]);i++){
        if(expressoes[i] == palavra){
            k = i;
            break;
        }else{
            continue;
        }
    }
    return k;
}

char *retorna_acao(int i){
    return acao[i];
}

if( strcmp(expressoes[i], palavra) == 0){
k = i;
break;
} else {
continue;
}