Latest web development tutorials

C ++ punteros vs arsenal

C ++ punteros C ++ punteros

Punteros y matrices están estrechamente relacionados. De hecho, apuntadores y arreglos en muchos casos son intercambiables. Por ejemplo, un puntero al comienzo de la matriz, la matriz se puede acceder mediante el uso de la aritmética de punteros o índice de matriz. Considere el siguiente programa:

#include <iostream>
 
using namespace std;
const int MAX = 3;
 
int main ()
{
   int  var[MAX] = {10, 100, 200};
   int  *ptr;
 
   // 指针中的数组地址
   ptr = var;
   for (int i = 0; i < MAX; i++)
   {
      cout << "Address of var[" << i << "] = ";
      cout << ptr << endl;
 
      cout << "Value of var[" << i << "] = ";
      cout << *ptr << endl;
 
      // 移动到下一个位置
      ptr++;
   }
   return 0;
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

Address of var[0] = 0xbfa088b0
Value of var[0] = 10
Address of var[1] = 0xbfa088b4
Value of var[1] = 100
Address of var[2] = 0xbfa088b8
Value of var[2] = 200

Sin embargo, apuntadores y arreglos no son completamente intercambiables. Por ejemplo, considere el siguiente programa:

#include <iostream>
 
using namespace std;
const int MAX = 3;
 
int main ()
{
   int  var[MAX] = {10, 100, 200};
 
   for (int i = 0; i < MAX; i++)
   {
      *var = i;    // 这是正确的语法
      var++;       // 这是不正确的
   }
   return 0;
}

* operador puntero se aplica a la var es perfectamente aceptable, pero el valor de modificación var es ilegal. Esto se debe a var es un puntero al comienzo de la constante de matriz, no puede servir como el valor de la izquierda.

Debido a que un nombre de la matriz corresponde a una constante de puntero, no cambian el valor de la matriz, todavía se puede utilizar la forma de puntero de expresión. Por ejemplo, la siguiente es una declaración válida, el var [2] 500 misiones:

*(var + 2) = 500;

La declaración anterior es válida, y se puede compilar correctamente, porque var sin cambios.

C ++ punteros C ++ punteros