C ++ ponteiros vs matriz
Ponteiros e matrizes estão intimamente relacionados. Na verdade, ponteiros e arrays, em muitos casos são intercambiáveis. Por exemplo, um ponteiro para o início da matriz, a matriz pode ser acessado usando a aritmética de ponteiro ou índice de matriz. Considere o seguinte 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; }
Quando o código acima é compilado e executado, ele produz os seguintes 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
No entanto, ponteiros e arrays não são completamente intercambiáveis. Por exemplo, considere o seguinte 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 ponteiro * é aplicada ao var é perfeitamente aceitável, mas o valor de modificação var é ilegal. Isto é porque var é um apontador para o início da constante de matriz, não pode servir como o valor esquerda.
Porque um nome de matriz corresponde a uma constante ponteiro, eles não alterar o valor da matriz, você ainda pode usar o formulário ponteiro de expressão. Por exemplo, o seguinte é uma declaração válida, a var [2] 500 atribuição:
*(var + 2) = 500;
A declaração acima é válido, e com êxito pode compilar, porque var inalterado.