Полагаю, вы имеете в виду, что структуры содержат одинаковые типы данных и отличаются только имена полей? Если это так, у вас есть два варианта:
1) Создайте тип объединения, который содержит обе эти структуры, и передайте его в some_func. Затем он может заполнить любого из членов объединения - не имеет значения, какой из них, так как схема памяти этих двух элементов абсолютно одинакова, поэтому он будет иметь тот же эффект.
2) Просто заставьте some_func взять одну из структур в качестве параметра, а когда вы хотите передать другую, приведите ее к первой. Опять же, поскольку расположение памяти одинаково, оно будет работать нормально, т. Е.
static struct stu1 **some_func(struct stu1 *not_sure_here, original_content_list)
{
...
}
int main(int argc, char *argv[])
{
return_struct1 = some_func(stu1);
return_struct2 = (struct stu2)some_func((struct stu1)stu2);
}