POINTERS AND ARRAYS

POINTER
A.     Pengertian Pointer
Pointer adalah sebuah variabel yang berisi alamat lain. Dimaksud untuk menunjukan ke suatu alamat memori sehingga alamat dari suatu variable dapat diketahui dengan mudah.
Bentuk umum dari pernyataan variable pointer dalam C++ yaitu:

<type> *ptr_name;

            Keterangan:
·       Type adalah tipe dasar pointer
·       Pointer name adalah nama variable pointer
·       * adalah variable pada alamatnya yang ditentukan oleh operand.
Contoh:
int i, *ptr;
ptr = &i;
     Untuk membuat nilai baru ke variable yang ditunjuk oleh pointer:
            *ptr = 5; / * artinya i = 5 */

B.     Fungsi Pointer
Adalah untuk menyimpan alamat memori dari sebuah variable dan alamat dari sebuah fungsi. Pointer dapat meningkatkan kinerja untuk operasi yang dilakukan secara berulang.

C.     Operator Pointer
Ada 2 operator pointer yang dikenal secara luas:
1.     Operator Dereference (&)
Biasa disebut “address of” atau operator alamat. Variable akan menampilkan alamat lokasi memori.
2.     Operator Reference (*)
Biasa disebut “value pointed by”. Bedanya dengan operator (&), operator ini akan menampilkan nilai yang terdapat dalam suatu alamat memori, bukan menampilkan alamat memorinya.

D.    Konsep Pointer



POINTER KE POINTER (multiple indirection)
Adalah suatu variable pointer yang menunjuk ke pointer lain yang telah menunjuk ke alamat tertentu.
            Syntax:
<type> **ptr_ptr ;
           
Contoh:
int i, *ptr, **ptr_ptr;
ptr = &i;
ptr_ptr = &ptr;
Untuk membuat nilai baru untuk i :
*ptr = 5 ;                     // artinya i = 5;
**ptr_ptr = 9 ;            // artinya i = 9; atau *ptr = 9;


ARRAY
A.     Pengertian Array
Array adalah sebah variable yang menyimpan lebih dari 1 buah data yang memiliki tipe data yang sama. Atau kumpulan dari data data tunggal yang dijadikan dalam 1 variabel array yang alamat memorinya berbeda yang selanjutnya disebut elemen2 array yang bisa kita akses berdasarkan indeks.

B.     Karakteristik Array
1.     Mempunyai batasan dari pemesanan alokasi memori (bersifat statis)
2.     Mempunyai tipe data sama (homogen)
3.     Dapat diakses secara acak
4.     Berurutan (terstruktur).

C.     Dimensi Array
1.     Array Dimensi satu (Vektor): karena hanya memiliki satu arah.
Syntax:
type_array­_value [value_dim];
Contoh:
                                    int A[10];
Keterangan:
·       Int adalah tipe elemen array
·       A adalah nama variable array
·       10 adalah ukuran (menyatakan jumlah maksimal elemen arraynya)
Ilustrasi:
Elemen array yang diindeks mulai dari 0

INISIALISASI ARRAY 1 DIMENSI
Inisialisasi dapat silakukan bersama dengan deklarasi atau tersendiri.
§  Contoh:
            int B[ ]={1, 2, -4, 8};
Array B mempunyai 4 elemen
§  Contoh:
int B[8]={1, 2, -4, 8};
§  Contoh:
int B[4] = { 1, 2, -4, 8, 9 };  // hasilnya error error; nilai dimensi kecil.
§  Contoh inisialisasi array setelah definisi:
int A[5];
(for i=0; i<5;i++) A[i]=0;

Text Box: Kenapa error?int B[5];          
B[5]={0,0,0,0,0};

AKSES ARRAY
·       Dua cara analog dalam mengakses suatu elemen i = 2;
            *(A+2) or A[2]
(A setara dengan &A[0] atau pointer konstan ke elemen pertama dari array tertentu)
·       Untuk menunjukan A[2] di monitor screen:
printf(“%d”,A[2]) or
        printf(“%d\n”,*(A+2));

MENENTAPKAN NILAI SUATU ELEMEN
Contoh : A[6] = 15;   A[3] = 27;


Pernyataan A[2] = A[3] – A[6], hasilnya:

VARIABEL POINTER
Variabel pointer adalah pointer yang dapat ditugaskan dengan nilai baru pada saat run-time.
POINTER KONSTAN
Pointer konstan adalah pointer yang tidak dapat ditugaskan dengan nilai baru pada saat run-time.
ARRAY ADALAH POINTER KONSTAN ke elemen pertama dari array. Array dapat diisi dengan variabel pointer.
§  Contoh :
       int x=10, y=20;
       int *ptr;  //ptr adalah variable pointer
       ptr = &x;
       ptr = &y;
§  Contoh :
       int x=10, y=20;
       int B[4];    // B adalah Array à pointer constant
       int *ptr;    // ptr adalah variable pointer
       ptr = &x;    // ok
       ptr = B;     // ok
       ptr++;       // ok
       B = ptr;     // error
       B++;         // error
       B = &y;      // error
(Ptr = B; analog dari ptr = &B[0]; B adalah pointer konstan menunjuk ke elemen pertama dari array).

Pointer konstan hanya bisa di inisialisasikan at definition time.
Contoh :
int Arr1[10];
Arr1[10] = {1, 2, 3, 4, 5};  // error
Arr1 = {1, 2, 3, 4, 5};      // error
Arr1[10] = 12;               // error max 9
Arr1[0] = 23;                // ok

int Arr2[10] = {1, 2, 3, 4, 5}; //ok

MENGAKSES ARRAY MENGGUNAKAN POINTER
int arr[10];
     int *ptr_arr;
     ptr_arr = arr; //or ptr_arr = &arr[0];
UNTUK MENGAKSES ELEMEN TERTENTU DAPAT DILAKUKAN MENGGUNAKAN
ptr_arr[i];
     arr[i];
     *(ptr_arr + i);
     *(arr + i);
     ptr_arr = ptr_arr + i; *ptr_arr;

CONTOH ARRAY: PROGRAM
Text Box: #include <stdio.h>
void main()
{
  int i;
  int list_int[10];
  for (i=0; i<10; i++){
    list_int[i] = i + 1;
    printf( "list_int[%d] init with %d.\n", i, list_int[i]);
  }
}
ARRAY 1 DIMENSI
C compiler tidak membatasi jumlah dimensi yang dapat dibuat.
            Contoh:

            Text Box: #include<stdio.h>

int SIZE = 5;

void main() {
  int i, j;
  int n[SIZE] = {15, 9, 1, 7, 5};
  for( i=0 ; i<= SIZE ; i++) {
  printf("%5d ", n[i]);
  for ( j=1; j<=n[i] ; j++) printf("%c","*");
  printf("\n"); 
  }
}













2.     Array dimensi dua
Syntax:
type name_array[row][col];
Contoh:
      Int a[3][4];

INISIALISASI:
Menggunakan rmo (row major order):

Contoh Array 2D:
Text Box: /* Printing out array 2-D */
#include <stdio.h>
void main() {
  int two_dim[3][5] = {1, 2, 3, 4, 5,
        10, 20, 30, 40, 50,
        100, 200, 300, 400, 500};
  int i, j;
  for (i=0; i<3; i++){
  for (j=0; j<5; j++) printf("%6d", two_dim[i][j]);
  printf("\n");
  }
}




















Output:
1 2 3 4 5
10 20 30 40 50
100 200 300 400 500

3.     Array Dimensi Tiga
Syntax:
type name_array[row][col][depth];
Contoh:
int x[3][2][4] = {{{1,2,3,4}, {5,6,7,8}},
                           {{11,12,13,14}, {15,16,17,18}},
                          {{21,22,23,24}, {25,26,27,28}}
                        };  
     void main() {
     int x[4][3][5] = {{{1, 2, 3}, {0, 4, 3, 4}, {1, 2}},
                                {{9, 7, 5}, {5, 7, 2}, {9}},
{{3, 3, 5}, {2, 8, 9, 9}, {1,2,1}},
{{0}, {1}, {0, 1, 9}}
                               };
     printf(“%5d”, x[2][1][3]);
     }

ARRAY OF POINTER
Sebuah array yang diisi dengan pointer
Syntax:
Type *array_name [value_dim];
Contoh :
int i;
     int *ptr[4];
     int x=1, y=2,  z=3, w=5;
     ptr[0]=&x, ptr[1]=&y; ptr[2]=&z;  ptr[3]=&w;
     for(i=0;i<4;i++) printf("%d ",*ptr[i]);
           
            Output : 1 2 3 5

ARRAY OF CHARACTER
Array yang diisi dengan karakter
Syntax:
char array_name[value_dim];
Contoh:
char name[40];
char ss[20]={‘B’,’I’,’N’,’U’,’S’};  //20 elements
char ss[ ]= {‘B’,’I’,’N’,’U’,’S’};  // 5 elements

STRING
Array dari karakter yang diakhiri dengan null character (‘\0’ atau dalam ASCII = 0)
String Konstan atau String Literal adalah beberapa karakter yang ditulis diantara double quote
Contoh : “Welcome to Binus”

Tipe string konstan adalah pointer konstan, dengan demikian dapat ditulis ke array karakter:
Contoh :
char name[40] = ”Amir”;  //ok
     name = ”Amir”;   // error name is a constant pointer
     Name[40]= “Amir”;  //error

STRING
A string konstan bisa dihubungkan pada waktu kompilasi:
 ”Hello,” ” world”
  Serupa dengan:
  ”Hello, world”
Contoh inisialisasi string:
 char s[ ] = ”BiNus”;  
  Serupa dengan:
  char s[ ] = {’B’,’i’,’N’,’u’,’s’,’\0’};
String sebagai sebuah data tidak dikenal dengan C.

CHAR VS STRING
Karakter C ditulis diantara single quote. Setiap satu pemakaian byte of computer memory
Contoh:
Text Box: Serupaachar ch=’A’;
     char ch=65;     //Ascii
     char ch=0x41;  //Ascii
String diantara Double quote:

STRING MANIPULASI
Dalam Standard Library Fuction (String.h) menyediakan fungsi untuk memanipulasi string:
·       Streln()
Mengembalikan nilai panjang string; kecuali null character
·       Strcpy (s1,s2)
Copy s2 ke s1
·       Strncpy(s1,s2,n)
Copy karakter n pertama dari s2 ke s1
·       Strncat (s1,s2)
Menambahkan string s2 ke ujung string s1
·       Strncat (s1,s2,n)
Menambahkan karakter n dari string s2 ke ujung string s1
·       Strcmp (s1,s2)
Membandingkan nilai string s1 dan s2, jika pengembalian serupa 0.
·       Dll.

Comments