[RESOLVIDO] tamanho de array duplicado?

Alguem saberia me explicar:

void setup(){
  Serial.begin(9600);
  unsigned int aux[200];
  
  for(int i=0; i<=200; i++){
    aux[i] = i;
    Serial.println(aux[i]);
  }
  Serial.print("Tamanho do array:");
  Serial.print(sizeof(aux));
  
}

void loop(){}

Ele printa no sizeof(aux) valor de 400 e não 200 (que foi o valor que definir no tamanho do aux)

Boa pergunta!
No entanto, o sizeof() devolve o tamanho em bytes:
http://arduino.cc/en/Reference/Sizeof

Como a array é do tipo inteiro (que ocupa dois bytes) o resultado é 2x200=400! Simples, não é?

Acho que entendi luisilva
Agora uma outra duvida:

void setup(){
  Serial.begin(9600);
  unsigned int aux[200];
  //String val = "1";
  
  for(int i=0; i<=201; i++){
    aux[i] = i;
    Serial.println(aux[i]);
  }
  Serial.println(aux[201]);
  Serial.println(aux[202]);
  Serial.print("Tamanho do array:");
  Serial.print(sizeof(aux)/sizeof(int));
  
}

void loop(){}

consigo add novos valores nas proximas posicoes, quando defino o tamanho do array ele nao teria que ser aquele valor msm?

Isso não pode ser feito. Ou seja, isto:

  unsigned int aux[200];

(...)
  Serial.println(aux[201]);
  Serial.println(aux[202]);
(...)

está errado. No entanto, mas não dá "erro de compilação", isto é, o programador não é avisado que está a escrever para além dos limites da array. Isto pode dar origem a erros (ou melhor dizendo, "bugs") muito complicados de detectar (comportamentos completamente inesperados e incompreensíveis). Aqui é facilmente visível, mas se em vez de:

(...)
  Serial.println(aux[201]);
(...)

estiver a fazer:

(...)
  Serial.println(aux[i]);
(...)

onde o i por algum motivo foi para além de 200, dependendo do programa, pode ser muito difícil de encontrar. Deve ser feito o possível para não deixar isto acontecer.

poise foi oque eu imaginei, mas acabei fazendo isso:

for(int i=0; i<=201; i++){
    aux[i] = i;
    Serial.println(aux[i]);
  }

e nao acusou nada, erro ou algo do tipo. O proprio compilador nao deveria da algum erro?

Devia, mas eu não percebo muito de compiladores, mas penso que seria uma coisa ou muito difícil ou praticamente impossível de fazer. Por outro lado não sei muito bem como, nem porquê, mas é uma funcionalidade que até pode ser útil.
No entanto, em C, pode sempre fazer-se isso (aceder a uma posição do array, que está fora dele) usando ponteiros (não vou colocar nenhum exemplo para não complicar, mas pode ser perfeitamente feito). Conclusão: É preciso ter muito cuidado com isso, como disse anteriormente. Como pode ser ultrapassado, por exemplo usando defines:

  #define MAX_AUX 200
  unsigned int aux[MAX_AUX]; // Noutra parte do código está definida a variável e o define do tamanho.
(...)

// Onde se quer fazer uma coisa destas é usado o define que serviu para criar a array
for(int i=0; i<MAX_AUX; i++){
// Uma coisa a ter em atenção é NUNCA usar o '=' na condição de paragem do ciclo
    aux[i] = i;
    Serial.println(aux[i]);
  }

Obrigado pela explicação :smiley: