Partilhar via


Argumentos

Os argumentos em uma chamada de função ter este formulário:

expression ( expression-list <SUB>opt</SUB> )  /* Function call */

Em uma chamada de função, lista de expressão é uma lista de expressões (separados por vírgulas).Os valores dessas expressões último são os argumentos passados para a função.Se a função leva sem argumentos, lista de expressão deve conter a palavra-chave void.

Um argumento pode ser qualquer valor com fundamentais, estrutura, união ou tipo de ponteiro.Todos os argumentos são passados por valor.Isso significa que uma cópia do argumento é atribuída ao parâmetro correspondente.A função não sabe o local de memória real do argumento transmitido.A função usa essa cópia sem afetar a variável da qual foi originalmente derivado.

Embora você não pode passar matrizes ou funções como argumentos, você pode passar ponteiros para esses itens.Ponteiros fornecem uma maneira para uma função acessar um valor por referência.Uma vez que um ponteiro para uma variável contém o endereço da variável, a função pode usar esse endereço para acessar o valor da variável.Argumentos de ponteiro permitem uma função acessar as matrizes e funções, mesmo que os arrays e funções não podem ser passadas como argumentos.

A ordem na qual os argumentos são avaliados pode variar em diferentes compiladores e níveis de otimização diferentes.No entanto, os argumentos e os efeitos colaterais são completamente avaliados antes que a função é inserida.Consulte efeitos colaterais para obter informações sobre os efeitos colaterais.

O lista de expressão em uma função chamada é avaliada e conversões aritméticas usuais são executadas em cada argumento na chamada da função.Se um protótipo estiver disponível, o tipo de argumento resultante é comparado com o parâmetro de correspondente do protótipo.Se eles não corresponderem, uma conversão é executada, ou uma mensagem de diagnóstico é emitida.Os parâmetros também passam por conversões aritméticas usuais.

O número de expressões em lista de expressão deve coincidir com o número de parâmetros, a menos que a definição ou protótipo da função especifica explicitamente um número variável de argumentos.Nesse caso, o compilador verifica como muitos argumentos quantos são os nomes de tipo na lista de parâmetros e converte-os, se necessário, conforme descrito acima.Consulte chamadas com um número variável de argumentos para obter mais informações.

Se a lista de parâmetros do protótipo contém apenas a palavra-chave void, o compilador espera zero argumentos na função de chamada e o zero parâmetros na definição.Uma mensagem de diagnóstico é emitida se ele encontrar quaisquer argumentos.

Exemplo

Este exemplo usa os ponteiros como argumentos:

int main()
{
    /* Function prototype */

    void swap( int *num1, int *num2 );
    int x, y;
    .
    .
    .
    swap( &x, &y );  /* Function call */
}

/* Function definition */

void swap( int *num1, int *num2 )
{
    int t;

    t = *num1;
    *num1 = *num2;
    *num2 = t;
}

Neste exemplo, o swap função é declarada em main ter dois argumentos, respectivamente representados por identificadores de num1 e num2, que são ponteiros para int valores.Os parâmetros num1 e num2 no estilo de protótipo definição também são declaradas como ponteiros para int digitar valores.

Na chamada de função

swap( &x, &y )

o endereço do x é armazenado em num1 e o endereço do y é armazenado em num2.Agora, dois nomes ou "aliases", existem para o mesmo local.References to *num1 and *num2 in swap are effectively references to x and y in main.As atribuições em swap do exchange, na verdade, o conteúdo de x e y.Portanto, não return declaração é necessária.

O compilador executa a verificação sobre os argumentos de tipo swap porque o protótipo do swap inclui tipos de argumento para cada parâmetro.Os identificadores de dentro dos parênteses do protótipo e definição podem ser igual ou diferente.O importante é que os tipos dos argumentos correspondem das listas no protótipo e a definição do parâmetro.

Consulte também

Conceitos

Chamadas de função