c - O parêntesis na entrada significativo matriz - CoreDump.pt
O parêntesis na entrada significativo matriz
Por que em algumas declarações de matrizes dinâmicas precisamos colocar nome de matriz entre parêntesis:
carrayssyntax
Publicado 08/11/2018 em 06:53 2018-11-08 06:53
fonte usuário Don Kielon
É sobre a precedência do operador, ou seja, que parte da instrução é executada pela primeira vez.
Como na matemática simples. É x = a + b*cexecutado como x = (a + b)*cou como x = a + (b*c)?
Assim, para o seu código a pergunta é: é *"mais forte" do que []ou é o contrário?
Considere apenas fazendo:
Como seria de esperar que para ser executado?
ou como B:
A resposta é que ele é executado como B por isso, se você realmente quer um, então você precisa explícita adicionar o parêntese.
Um exemplo onde você gostaria Uma é quando allocMaté um ponteiro para uma matriz.
Um exemplo onde você gostaria B é quando allocMaté uma matriz de ponteiros.
Respondeu 08/11/2018 em 07:00 2018-11-08 07:00 share
fonte usuário 4386427
Allocmat é presumivelmente um ponteiro para uma matriz.
Os parênteses são necessários para obter a indireção corretamente. Então (*allocMat)[count++]é a mesma allocMat[0][count++]. Será que você omitir os parênteses, *allocMat[count++]seria igual a allocMat[count++][0]que é completamente diferente. Isto porque de precedência de operadores - []liga-se um pouco mais apertado do que *.
Respondeu 08/11/2018 em 06:57 2018-11-08 06:57 share
fonte usuário Antti Haapala
Isto é devido à precedência do operador . O operador subscrito de matriz []tem prioridade mais alta que o operador desreferenciava unária *. Então, a menos que o parêntese é usado, uma declaração como
será analisado como
que não é desejado.
Para avaliar corretamente a declaração, é preciso primeiro excluir a referência o ponteiro, e depois, o índice para ele, como
No trecho acima, allocMaté um ponteiro para uma matriz. Então, a menos que, o dereference é forçado a maior prioridade, o operador subscripting [], que tem maior prioridade, serão tidas em conta em primeiro lugar e irá resultar em avaliação incorreta.