Latest web development tutorials

C ++ aritmatika pointer

C ++ pointer C ++ pointer

Pointer adalah alamat dari representasi numerik. Oleh karena itu, Anda dapat melakukan operasi aritmatika pada pointer. Pointer dapat beroperasi empat aritmatika: +, -, +, -.

ptr Misalkan adalah pointer ke alamat bilangan bulat pointer 1000, adalah 32-bit integer, biarkan pointer aritmetika untuk melakukan hal berikut:

ptr++

Setelah melakukan operasi di atas, poinptr ke posisi 1.004, karena ptr setiap waktu tambahan itu akan menunjuk ke posisi integer berikutnya bahwa posisi saat pindah kembali empat byte.Dalam kasus operasi ini tidak akan mempengaruhi nilai sebenarnya dari lokasi memori, memindahkan pointer ke lokasi memori berikutnya. Jikaptr poin ke alamat dari 1000 karakter, operasi di atas akan menyebabkan pointer ke posisi 1.001, karena posisi karakter berikutnya di 1.001.

Incrementing pointer

Kami ingin menggunakan pointer bukan array dalam program ini, karena pointer variabel bertambah, dan array tidak dapat meningkat, karena array adalah pointer konstan. Program berikut increment variabel pointer secara berurutan akses setiap elemen dalam array:

#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;
}

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

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

Pengurangan pointer

Demikian pula, pointer decremented dan mengurangkan jumlah byte yang adalah nilai tipe data, sebagai berikut:

#include <iostream>

using namespace std;
const int MAX = 3;

int main ()
{
   int  var[MAX] = {10, 100, 200};
   int  *ptr;

   // 指针中最后一个元素的地址
   ptr = &var[MAX-1];
   for (int i = MAX; i > 0; i--)
   {
      cout << "Address of var[" << i << "] = ";
      cout << ptr << endl;

      cout << "Value of var[" << i << "] = ";
      cout << *ptr << endl;

      // 移动到下一个位置
      ptr--;
   }
   return 0;
}

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

Address of var[3] = 0xbfdb70f8
Value of var[3] = 200
Address of var[2] = 0xbfdb70f4
Value of var[2] = 100
Address of var[1] = 0xbfdb70f0
Value of var[1] = 10

bandingkan pointer

Pointer dapat digunakan untuk membandingkan hubungan antara operator, seperti ==, <dan>. Jika p1 dan p2 poin ke dua variabel terkait, seperti dengan sebuah array dari elemen yang berbeda, dapat menjadi ukuran p1 dan p2 dibandingkan.

Prosedur berikut memodifikasi contoh di atas, selama alamat elemen terakhir dari variabel pointer adalah alamat dari array adalah kurang dari atau sama untuk & var [MAX - 1], menempatkan variabel pointer bertambah:

#include <iostream>

using namespace std;
const int MAX = 3;

int main ()
{
   int  var[MAX] = {10, 100, 200};
   int  *ptr;

   // 指针中第一个元素的地址
   ptr = var;
   int i = 0;
   while ( ptr <= &var[MAX - 1] )
   {
      cout << "Address of var[" << i << "] = ";
      cout << ptr << endl;

      cout << "Value of var[" << i << "] = ";
      cout << *ptr << endl;

      // 指向上一个位置
      ptr++;
      i++;
   }
   return 0;
}

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

Address of var[0] = 0xbfce42d0
Value of var[0] = 10
Address of var[1] = 0xbfce42d4
Value of var[1] = 100
Address of var[2] = 0xbfce42d8
Value of var[2] = 200

C ++ pointer C ++ pointer