create column name from other table rows mySQL
Using same stored procedure from previous answer, you can generate a new columns names, casting ans_question_xx with the name of each question.

create procedure getStudentAnswers(StudentId int)
begin

    set @cols := (select group_concat('ans_question_',
                                       cast(question_id as char(20)), 
                                       ' as ', 
                                       question separator ', ') 
                  from questions);                           

    set @sql = concat('select student_id,  ', 
                      @cols, 
                      ' from   answers
                        where student_id = ', cast(StudentId as char(20)), 
                      ' order by student_id;');

    PREPARE dynamic_statement FROM @sql;
    EXECUTE dynamic_statement;
    set @sql := null;
    set @cols := null;
    DEALLOCATE PREPARE dynamic_statement;

end \\

call getStudentAnswers(11);

call getStudentAnswers(12);

| student_id | Gender | Area_code | Another_question |
|------------|--------|-----------|------------------|
| 11         | Male   | 23        |                  |

| student_id | Gender | Area_code | Another_question |
|------------|--------|-----------|------------------|
| 12         | Female | 21        | null             |


Rextester here