2010-09-07 8 views
56

tengo un puntero int (int * recuento) si quiero incrementar el número entero que se apunta en el uso ++ pensé que iba a llamar avalor de incremento de int siendo apuntada por el puntero

*count++; 

Sin embargo, recibo una advertencia de compilación "resultado de expresión no utilizado". Puedo llamar al

*count += 1; 

Pero me gustaría saber cómo usar el ++. ¿Algunas ideas?

Respuesta

75

++ tiene la misma precedencia que el * y la asociatividad es de derecha a izquierda. Ver here. Se hace aún más complejo porque aunque ++ se asociará con el puntero, el incremento se aplica después de la evaluación de la declaración.

El orden de las cosas sucedan es:

  1. incremento Post, recuerda el valor de dirección puntero del post incrementado como temporal
  2. Desreferencia no incrementa dirección de puntero
  3. Aplicar la dirección del puntero incrementado a contar, contar ahora apunta a la próxima dirección de memoria posible para una entidad de su tipo.

Usted recibe la advertencia, ya que en realidad nunca utiliza el valor sin referencia en el paso 2. Al igual que @Sidarth dice, tendrá paréntesis para forzar el orden de evaluación:

(*ptr)++ 
+7

me gustaría añadir que Siempre escribo este caso como '++ * ptr;' porque la precedencia no es ambigua, y si no se utiliza el resultado, no hay necesidad de distinguir entre preincremento y postincremento. – RBerteig

+2

@RBerteig: Puede ser inequívoco para el compilador pero sigue siendo confuso para un humano. Es mucho mejor usar paréntesis ya que esto hará que sea más fácil de leer. –

+1

@Martin, el uso excesivo de paréntesis puede ser tan confuso para un ser humano. Cuando se escribe como lo hice, solo hay un orden plausible de operaciones, y coincide con la lectura natural de "incremento", "algo apuntado por", "p". – RBerteig

13

Intente utilizar (*count)++. *count++ podría estar incrementando el puntero a la siguiente posición y luego usando la indirección (que no es intencional).

Cuestiones relacionadas