Los arrays se pasan siempre por referencia, si retornaras (char*)&cad seria exactamente la misma direccion la que estuvieras devolviendo.Que es el (char*)? porque hace falta ponerlo?
Eso te imprime 77, el puntero es correcto, pero el valor en la pila es modificado posteriormente.Pues no entiendo la diferencia entre retornar "cad" y retornar "&v", ambas son direcciones de memoria, y ambas son modificadas al retornar la funcion, por lo que tambien tendria que variar el contenido de "&v"... incluso el compilador te marca el mismo aviso que dijiste "warning C4172: returning address of local variable or temporary".
Que es el (char*)? porque hace falta ponerlo?
Pues no entiendo la diferencia entre retornar "cad" y retornar "&v", ambas son direcciones de memoria, y ambas son modificadas al retornar la funcion, por lo que tambien tendria que variar el contenido de "&v"... incluso el compilador te marca el mismo aviso que dijiste "warning C4172: returning address of local variable or temporary".
Otra cosa, que estas comparando en esta sentencia? : "if(cad1<cad2)"... ya se que para comparar se utiliza strcmp...
Es un casting, hace falta ya que tu variable es char[5] y no char *.Porque tiene que ser "char*"? no estabamos devolviendo antes cad? que deberia ser lo mismo que &cad?
No hay diferencia, las dos estan mal, vos dijiste que funcionaba y yo te mostre que en ese caso durante un momento funcionaba y ni bien hacias una operacion el valor, que esta en la pila, era modificado. El contenido de v varia, por algo imprime 77 y no 3, v sigue apuntando a la misma direccion en memoria pero su contenido cambia.
Porque tiene que ser "char*"? no estabamos devolviendo antes cad? que deberia ser lo mismo que &cad?
Pero cambia, porque invocaste a la funcion primero con 3 y luego con 77, entonces logicamente, la direccion de memoria de v contendra el ultimo valor que le diste, en este caso 77, y te imprime de hecho 77. Pero en el caso que yo puse arriba, invoque a la funcion solo con un valor, solo una vez, y sin embargo, la pila es modificada mientras que con "&v" no.
Ya lo hice, gracias por tu ayuda. A ver, si yo el ejemplo que me pusiste lo entiendo, entiendo lo que quieres decir, el puntero modifica su valor apuntado cada vez que algo llama a la funcion...Lo mismo que en el caso de int, char se pasa por valor y no por referencia.