Executando verificação de segurança...
Em resposta a Entendendo Arrays
3

Vale lembrar que essas definições variam conforme a linguagem.

Por exemplo, a alocação em um bloco de memória contínuo é verdade em C e C++, só para citar duas (mas também vale para Java e outras).

Porém, em outras linguagens como PHP e JavaScript, o "array" é uma estrutura que pode mudar de tamanho, e por isso não é alocado de forma contínua (em PHP, na verdade o "array" é implementado como uma hashtable).

Já em Python, o nome da estrutura básica é "lista", que também pode mudar de tamanho e não é alocada de forma contínua. Embora a sintaxe seja bem similar a de um array, como o uso de [] para acessar índices, etc, a implementação é diferente de linguagens que alocam de forma contínua, como C.

E mesmo a regra de ter todos os elementos do mesmo tipo também não é universal. Em JavaScript, PHP, Python e várias outras, é perfeitamente possível ter um array como [1, "abc", objeto_de_qualquer_tipo].

Se forçarmos a barra, até mesmo em Java podemos ter algo como:

// Em Java, um array de Object pode ter "qualquer coisa"
Object[] array = {1, "abc", null, new FileInputStream("/tmp/arquivo")};

Embora eu não recomende, é um código perfeitamente válido. Isso porque um array declarado com um tipo T pode ter elementos que sejam subtipos de T, por isso um array de Object pode ter "qualquer coisa" (no caso do 1, é feito o auto-boxing para Integer).

Outra diferença é que algumas linguagens permitem índices negativos ou intervalos. Por exemplo, em Python lista[-1] retorna o último elemento da lista, lista[-2] o penúltimo, e assim por diante. E lista[2:5] retorna outra lista, contendo os elementos dos índices 2, 3 e 4 (o intervalo é "start inclusive, end exclusive", ou seja, o primeiro índice é incluso, o último não).

Em C# tem algo similar: array[^1] retorna o último elemento do array, array[^2] o penúltimo, etc, e array[2..5] retorna outro array contendo os elementos dos índices 2, 3 e 4.


Cada índice em um array é uma referência (ou ponteiro) para uma posição específica na memória onde o valor correspondente está armazenado.

Depende. Em Java, arrays de tipos primitivos não usam ponteiros e nem referências, os próprios valores são colocados diretamente no array.


Claro que como "guia geral" ou introdução ao conceito, está ótimo. Mas é sempre bom se atentar a essas diferenças, pois cada linguagem possui seus detalhes de implementação. Não dá pra achar que o array sempre vai ser igual em todas elas.

Carregando publicação patrocinada...
1

Perfeito kht, obrigado pelo esclarecimento!

Cada índice em um array é uma referência (ou ponteiro) para uma posição específica na memória onde o valor correspondente está armazenado.

Neste caso o que eu tentei dizer, mas talvez eu nao tenha explicado da melhor forma, é que quando indicamos um índice como por exemplo int num = numeros[5]; esse 5 se refere a uma posicao na memoria, onde o valor esta armazenado.