atoi работает не с одним символом, а со всей строкой, когда пишем atoi( a + back ) то он работает с "1=1", а когда пишем atoi( a + k + 1 ) то с "1"
правильнее сделать так :
const char * a = "1=1";
char back = 0;
char k = 1;
char temp[] = {0, 0}; // по-сути это временная строка, первый символ будет цифра из нашей строки, второй будет 0 - символ окончания строки в памяти
temp[0] = *(a + back);
int n1 = atoi(temp);
temp[0] = *(a + k + 1);
int n2 = atoi(temp);