1) Void se usa para cuando se quiere que una funcion no devuelva nada. printf no es una funcion void mira su declaracion:
http://www.cplusplus.com/reference/c...cstdio/printf/
Tiene un valor de retorno, pero por lo general nunca se captura en una variable.
EL uso o no del void depende de cada programador... muchos prefieren en vez de no devolver nada, devolver un entero para informar si huvo error o no.
Por lo general cuando se usan punteros, no es necesario que las funciones devuelvan valores.
2) Lo correcto es usar int main(). Y al final de todo usar la sentencia return. Por lo general se devuelve 0 o otro numero si huvo errores.
3) Los punteros se usan para hacer referencia a otras variables...son somamentes necesarios para utilizar memoria dinamica por ejemplo. O tambien para manejar vectores. Tambien sirven para modificar variables desde otras funciones.
Por ejemeplo
Código C++:
Ver originalvoid mal_swap(int a , int b)
{ int t;
t =a ;
a = b;
b = t;
}
void bien_swap(int * a , int * b)
{ int t;
t =*a ;
*a = *b;
*b = t;
}
Mira esasa dos funciones. La primera esta incorrecta...porque cambia el valor local de las variables. asi que cuando retorne la funcion las variables a, b van a seguir estando com oestaban.
En cambio la otroa al usar puntero modifica las variables originales. Obviamente hay que invocar las funciones de forma diferente.
mal_swap(a,b);
bien_swap(&a,&b);
4) En C no hay clases. En c++ hay clases, e intancias de clases. No se cual seria la diferencia entre clases y objetos...
Espero ser claro,
Saludos