Normalmente, la representación de esas dos estructuras sería exactamente la misma. Sin embargo, es posible que tenga un rendimiento deficiente si elige el incorrecto para su caso de uso.
Por ejemplo, si necesita acceder a cada elemento en un bucle, con un arsenal que podría hacer:
for (int i = 0; i < 3; i++)
dosomething(xvec[i]);
Sin embargo, sin una matriz, que le sea necesario duplicar el código:
dosomething(x);
dosomething(y);
dosomething(z);
Esto significa duplicación de código, que puede ser de cualquier manera. Por un lado, hay menos código de bucle; por otro lado, los bucles muy apretados pueden ser bastante rápidos en los procesadores modernos, y la duplicación de código puede volar el I-caché.
La otra opción es un interruptor:
for (int i = 0; i < 3; i++) {
int *r;
switch(i) {
case 0: r = &x; break;
case 1: r = &y; break;
case 1: r = &z; break;
}
dosomething(*r); // assume this is some big inlined code
}
Esto evita la posiblemente a gran huella de i-cache, pero tiene un enorme impacto en el rendimiento negativo. No hagas esto
Por otro lado, es, en principio, posible gama accede a ser más lento, si su compilador no es muy inteligente:
xvec[0] = xvec[1] + 1;
dosomething(xvec[1]);
Desde xvec [0] y xvec [1] son distinto, en principio, el compilador debería ser capaz de mantener el valor de xvec [1] en un registro, por lo que no tiene que volver a cargar el valor en la siguiente línea. Sin embargo, es posible que algunos compiladores no sean lo suficientemente inteligentes como para notar que xvec [0] y xvec [1] no tienen alias. En este caso, usar campos separados podría ser un poco más rápido.
En resumen, no se trata de que una u otra sea rápida en todos los casos. Se trata de hacer coincidir la representación con la forma en que la usas.
Personalmente, le sugiero que vaya con lo que sea que haga que el código que funciona en xvec sea más natural. No vale la pena pasar mucho tiempo humano preocupándose por algo que, en el mejor de los casos, probablemente solo produzca una diferencia de rendimiento tan pequeña que solo la detectará en micro-puntos de referencia.
Las matrices permiten la iteración sobre sus valores, lo que no es posible cuando se usan miembros individuales – Christoph
Cuando tenga una pregunta sobre eficiencia/rendimiento, escriba una pequeña aplicación de prueba y compare. Si tiene problemas para interpretar los resultados, haga una pregunta. –