Posicionamiento de incremento de matriz con respecto al indexador en C – matriz[i]++ frente a matriz[i++]

3 minutos de lectura

avatar de usuario de samprat
Samprat

Cuál es la diferencia entre array[i]++ (incremento fuera de los corchetes) y array[i++] (incremento entre paréntesis), donde la matriz es un int array[10]?

avatar de usuario de taskinoor
tarea

int a[] = {1, 2, 3, 4, 5};
int i = 1; // Second index number of the array a[]
a[i]++;
printf("%d %d\n", i, a[i]);
a[i++];
printf("%d %d\n", i, a[i]);

Producción

1 3
2 3

a[i]++ incrementa el elemento en el índice ino se incrementa i. Y a[i++] incrementos ino el elemento en el índice i.

  • Lo que falta en esta respuesta es lo que a[i]++ y a[i++] evaluar a.

    –David Heffernan

    29 de septiembre de 2011 a las 9:56

  • Es un poco confuso porque la matriz valores están en aproximadamente el mismo rango que la matriz índices. ¿Puede compensar los valores (digamos, por 60), para que no haya superposición entre índices y valores?

    -Peter Mortensen

    13 de enero de 2020 a las 3:38


  • El resultado del ejemplo es engañoso, ya que el acceso de a[i++] en la segunda declaración en realidad devuelve el valor en el índice 1que se ha incrementado hasta 3 antes. Sé consciente de x = a[i++]; es equivalente a la secuencia de declaraciones x = a[i]; i++; Entonces i se usa como índice antes se incrementa.

    -Richard Neumann

    24 de enero de 2021 a las 18:17

Avatar de usuario de David Heffernan
David Heffernan

  • array[i]++ incrementa el valor de array[i]. La expresión se evalúa como array[i] antes de que se haya incrementado.
  • array[i++] incrementa el valor de i. La expresión se evalúa como array[i]antes i se ha incrementado.

Una ilustración.

Suponer que array contiene tres enteros, 0, 1, 2, y que i es igual a 1.

  • array[i]++ cambios array[1] a 2, evalúa a 1 y sale i igual a 1
  • array[i++] no modifica arrayevalúa a 1 y cambia i a 2.

Los operadores de sufijo, que está utilizando aquí, se evalúan como el valor de la expresión antes de que se incremente.

array[i]++ medio ( *(array+i) )++. –> Incrementa el Valor.

array[i++] medio *( array + (i++) ). –> Incrementa el Índice.

Avatar de usuario de Gouse Shaik
gouse shaik

Aquí el Array[i]++ incrementa el valor del elemento array[i]pero array[i++] incrementa el i valor que afecta o cambia la indicación del elemento de la matriz (es decir, indica el siguiente elemento de una matriz después de array[i]).

Digamos que tenemos este ejemplo, array[i++] = x[m++]. Esto significa que el primer conjunto array[i] = x[m] luego aumentar los índices como i + 1, m + 1.

Aquí array[i++] incrementa el número de índice.
De lo contrario, array[i]++ incrementa el valor de los datos de i índice.

Fragmento de código:

#include <iostream>
using namespace std;

int main() 
{
    int array[] = {5, 2, 9, 7, 15};

    int i = 0;

    array[i]++;
    printf("%d %d\n", i, array[i]);

    array[i]++;
    printf("%d %d\n", i, array[i]);

    array[i++];
    printf("%d %d\n", i, array[i]);

    array[i++];
    printf("%d %d\n", i, array[i]);

    return 0;
}

Avatar de usuario de WD
WD

#include<iostream>
using namespace std;
int main()
{
    int arr[]={1,2,37,40,5,7};
    int i = 3;
    arr[i]++;
    cout<<i<<" "<<arr[i]<<endl;
    arr[i++];
    cout<<i<<" "<<arr[i]<<endl;
    return 0;
}

Producción:

3 41
4 5

En este ejemplo i = 3entonces arr[3] = 40. Luego aumenta el valor de 40 a 41. Entonces arr[i]++ incrementa el valor de este índice particular y a[i++] primero incrementa el índice y luego da el valor de este índice.

¿Ha sido útil esta solución?