The guy from CPF can be a string, or an array of chars sized 11 + 1.
A CPF number is composed of 11 digits, your buffer needs to be at least 12 elements to be able to retain a CPF, where the last element serves to accommodate the terminator \0.
Look at that:
#define CPF_TAM_MAX     (11)
#define NOME_TAM_MAX    (100)
typedef struct {
    char nome[ NOME_TAM_MAX + 1 ];
    data nascimento;
    char cpf[ CPF_TAM_MAX + 1 ];
} ficha;
Now, change the line:
scanf( "%d", &ponteiro->cpf );
To:
scanf( "%s", ponteiro->cpf );
When reading a line with fgets(), the line end character \n and/or \r are not removed from the end of the buffer:
fgets( ponteiro->nome, 100, stdin );
Include the next line to safely remove them:
ponteiro->nome[ strcspn(ponteiro->nome, "\r\n") ] = 0;
All together:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define CPF_TAM_MAX     (11)
#define NOME_TAM_MAX    (100)
typedef struct {
    int dia;
    int mes;
    int ano;
} data;
typedef struct {
    char nome[ NOME_TAM_MAX + 1 ];
    data nascimento;
    char cpf[ CPF_TAM_MAX + 1 ];
} ficha;
void preencher(ficha *ponteiro)
{
    printf("NOME: ");
    fgets( ponteiro->nome, NOME_TAM_MAX, stdin );
    ponteiro->nome[strcspn(ponteiro->nome, "\r\n")] = 0;
    setbuf( stdin, 0 );
    printf("DATA DE NASCIMENTO (DD MM AAAA): ");
    scanf("%d %d %d",&ponteiro->nascimento.dia,&ponteiro->nascimento.mes,&ponteiro->nascimento.ano );
    setbuf(stdin,0);
    printf("CPF: ");
    scanf( "%s", ponteiro->cpf);
}
void imprimir(ficha *ponteiro)
{
    printf("NOME: %s\n", ponteiro->nome );
    printf("DATA DE NASCIMENTO: %02d/%02d/%04d\n", ponteiro->nascimento.dia, ponteiro->nascimento.mes, ponteiro->nascimento.ano );
    printf("CPF: %s\n", ponteiro->cpf );
}
int main( void )
{
    ficha pessoa;
    preencher( &pessoa );
    imprimir( &pessoa );
    return 0;
}
Testing:
NOME: Fulano de Tal
DATA DE NASCIMENTO (DD MM AAAA): 03 07 2018
CPF: 00011122299
NOME: Fulano de Tal
DATA DE NASCIMENTO: 03/07/2018
CPF: 00011122299