Olá!
Quando passamos um vetor como argumento para alguma função, o passamos por referência, ou seja, não enviamos o valor de cada elemento do vetor e sim o endereço do primeiro elemento do vetor.
Lembre-se, quando uma variável é passada como argumento à uma função, esta função cria uma variável local em que "copia" o valor da variável da função chamadora.
Agora imagine que você tenha um vetor teste[100]. Passar 100 valores para uma função seria algo que necessitaria de muito processamento, algo desnecessário. Por isso, convenciona-se que a passagem de vetor como argumento seja por referência! Abaixo um trecho extraído do livro "Treinamento em Linguagem C":
"As matrizes são consideradas um tipo de dado bastante grande, pois são formados por diversas variáveis. Por causa disso, em linguagem C, determina-se ser mais eficiente existir uma única cópia da matriz na memória, sendo, portanto, irrelevante o número de funções que a acessem. Assim, não são passados os valores contidos na matriz, somente o seu endereço de memória.
O que ocorre quando o endereço de uma matriz é passado para uma função como argumento?
A função usa o endereço para acessar os elementos da matriz original, criada na função que chama. Isto significa que as alterações que a função efetuar nos elementos da matriz afetarão a matriz original.
'Ao passar o nome de uma matriz para uma função não se cria uma nova cópia da matriz; a passagem é por referência'
"
Ok, então o que faço?
Se o endereço da memória do vetor é o que é passado para a função, significa que o que você fizer neste vetor, será gravado diretamente na memória, ou seja, não precisa retornar nenhum valor para a função chamadora! Logo, toda função que trate apenas vetores são do tipo void.
Outro ponto é que o return retorna apenas um único valor.
Segue o código com algumas alterações:
#include <stdio.h>
#include <stdlib.h>
#define TAM 4 /*Depois altere para 25*/
void valoresnegativos(float *A);
int main(void){
int i;
int A[TAM];
for (i = 0; i < TAM; i++){
printf("Digite o valor %d: ", i+1);
scanf("%d", &A[i]);
}
valoresnegativos(A);
return 0;
}
void valoresnegativos(float *A){
int i;
for (i = 0; i < TAM; i++){
if(A[i]<0)
A[i]=0;
}
for(i = 0; i < TAM; i++)
printf("%d\n",A[i]);
}