"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que C e C++ ignoram comprimentos de array em assinaturas de funções?

Por que C e C++ ignoram comprimentos de array em assinaturas de funções?

Publicado em 2024-12-26
Navegar:435

Why Do C and C   Ignore Array Lengths in Function Signatures?

Passando matrizes para funções em C e C

Pergunta:

Por que C e Os compiladores C permitem declarações de comprimento de array em assinaturas de funções, como int dis(char a[1]), quando não são aplicado?

Resposta:

A sintaxe usada para passar arrays para funções em C e C é uma estranheza histórica que permite a passagem de um ponteiro para o primeiro elemento do array em vez do próprio array.

Explicação detalhada:

Em C e C , os arrays não são passados ​​por referência a funções. Em vez disso, é passado um ponteiro para o primeiro elemento da matriz. Isso significa que a notação [] na assinatura da função é realmente ignorada pelo compilador.

Implicações:

Esse comportamento pode levar à confusão porque parece que um array está sendo passado por referência, mas na realidade, apenas um ponteiro está sendo passado. Além disso, não é possível determinar o comprimento do array a partir da assinatura da função, o que pode dificultar o trabalho com arrays de comprimento variável.

Perspectiva histórica:

A decisão de permitir essa sintaxe foi tomada na década de 1970 como uma forma de fornecer uma maneira conveniente de passar arrays para funções. No entanto, desde então, causou confusão e potenciais vulnerabilidades de segurança. Na programação moderna, é recomendado evitar o uso desta sintaxe e, em vez disso, passar arrays por referência usando ponteiros.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3