En estos casos, ten en cuenta el orden en que se llaman los operadores: http://es.cppreference.com/w/cpp/language/operator_precedence
Primero, el post-incremento(_++). Luego, la desreferencia(*).
Eso es lo mismo que:
El post-incremento retorna el valor que tiene actualmente, e incrementa el valor de la variable (el retorno sigue siendo el antiguo).
Así pues, poner ese * ahí no hace nada funcional.
En caso de que te refieras a:
Pues hace lo esperado. str tendrá el valor de *envp, y luego se incrementará.
El compilador usualmente optimizará estas cosas, no es un tema realmente preocupante. Es más importante la legibilidad del código y, por supuesto, la funcionalidad.
Si programases C++, sí que podría tener algo más de repercusión al trabajar con objetos. Pero no mucha más.
Primero, el post-incremento(_++). Luego, la desreferencia(*).
Código (c) [Seleccionar]
*envp++;
Eso es lo mismo que:
Código (c) [Seleccionar]
*(envp++);
El post-incremento retorna el valor que tiene actualmente, e incrementa el valor de la variable (el retorno sigue siendo el antiguo).
Así pues, poner ese * ahí no hace nada funcional.
En caso de que te refieras a:
Código (c) [Seleccionar]
str = *envp++;
Pues hace lo esperado. str tendrá el valor de *envp, y luego se incrementará.
El compilador usualmente optimizará estas cosas, no es un tema realmente preocupante. Es más importante la legibilidad del código y, por supuesto, la funcionalidad.
Si programases C++, sí que podría tener algo más de repercusión al trabajar con objetos. Pero no mucha más.