Você não pode criar um ponteiro para o campo de preço da struct, tem que instanciar uma variável pra apontar pra ela.
adicionado 2 minutos depois
scanf("%d", &Vendas.Codlivro, &codrec); //aqui você faz leitura de duas variáveis, mas só tem um %d.
adicionado 10 minutos depois
void registrovenda()
{
LIVRO Livros;
VENDA Vendas;
float* pend;
float preco;
int quant,cont,contmt,codrec,plcod;
system("cls");
printf("\n------------------------------------------------------------------------------");
printf("\n Registro de vendas");
printf("\n------------------------------------------------------------------------------");
Vendas.Codvenda = pos_vd() +1;
printf("\n Código da venda: %d", Vendas.Codvenda);
fflush(stdin);
printf("\n Digite o código do livro:");
scanf("%d", &Vendas.Codlivro, &codrec); //duas variáveis com um %d
fflush(stdin);
printf("\n Digite a data da venda: ");
gets(Vendas.data);
puts(" Digite a quantidade de Livros: ");
scanf("%d",&Vendas.qtd, &quant); //duas variáveis com um %d
pend = &Livros.preco; //como vai pegar o preço do livro se você não instanciou ou pegou do arquivo. Está pegando uma variável vazia.
codrec = codrec-1;
for(cont= 0;cont>=codrec;cont++)
{
pend++;
}
preco= *pend;
for(contmt=0;contmt<=quant;contmt++)
{
preco+= preco;
}
Vendas.Valortotal= preco;
printf("O valor total da venda é: %f",preco);
FILE *pVendas;
pVendas = fopen("vendas.txt","a");
fwrite(&Vendas, sizeof(VENDA), 1, pVendas);
fclose(pVendas);
}
Terá que abrir o arquivo livros.txt e atribuí-lo a uma variável tipo vetor de LIVRO e só assim vai pegar os valores registrados.
adicionado 11 minutos depois
Já testou essa função mostratodososlivros() ?