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


#define N 3 //кол-во строк
#define M 5 //кол-во символов в строке (4 символа + '\0' для разделения строк в памяти

void print_name(char** array, const int num) {
    printf("%s\n", array[num]);
}

//или так
void print_name_1(char* array, const int num) {
	array += M*num;
    printf("%s\n", array);
}

int main()
{
    //char* names[3][4];
	//выделяем память правильно!
	char **names = (char**) malloc(N*sizeof(char*) + M*N*sizeof(char));
	names[0] = (char*) (names + N);	//указатель на первый символ
	for(size_t i=1; i<N; i++)
		names[i] = names[0] + M*i;	//смещаем указатель под начало строк
	
	//используем функцию strcpy из <string.h>
    strcpy(names[0],"kola");
    strcpy(names[1],"vasa");
    strcpy(names[2],"misa");
	
	
    print_name(names, 2);
	
	print_name_1(names[0], 0);
	
	free(names);	//освобождаем память одной функцией free
	
    return 0;
}