$1.99 Domains* at GoDaddy.com

C++ Programlama new Operatörü

cders-136Genel biçimi:

 

new <tür> [<[uzunluk]>]

 

new int

new char

new double [10]

new float[n]

new char[strlen(s) + 1]

 

Eğer köşeli parantez olmadan sadece tür ismi ile tahsisat yapılırsa o türden bir elemanlık yer tahsis edilmiş olur. Örneğin:

 

new int à1 int’lik yer tahsis edilmiştir.

 

Eğer köşeli parantez içerisine ifade yazılarak kullanılırsa bu durumda o ifade ile belirtilen sayıda elemanlık alan tahsis edilir. new operatörü türü belirli bir alan tahsis eder. Yani new operatörüyle elde edilen adresin tür bileşeni çağırılma ifadesindeki tür ile aynı olur.

 

int *p;

p = new int;    /*         Burada sizeof(int) kadar byte tahsis ediliyor ve tahsis edilen          */         /*         alanın başlangıç adresi elde ediliyor. Bu adres int türündedndir.   */

 

char *p;

p = new int [10];         /*         C++’ta hatadır.           */

p = (char *)new int[10];         /*         Hata değil.      */

 

/*———-new1.cpp———*/

#include <stdio.h>

#include <string.h>

 

void main(void)

{

    char *p;

 

    p = new char[30];

    gets(p);

    puts(p);

}

/*——————————*/

 

New bir operatördür. Ancak derleyici bu operatör kullanıldığında dinamik tahsisat işleminin yapılmasını sağlamak için dinamik tahsisat yapan bir fonksiyonun çağırma  kodunu amaç koda  ekler. Yani new bir operatör olmasına karşın tahsisat işlemi yerleştirilen bu fonksiyon sayesinde programın çalışma zamanı sırasında yapılmaktadır. Bu operatör öncelik tablosunun ikinci düzeyinde bulunmaktadır. Örneğin:

new int + n

gibi bir işlem geçerlidir. İşlemler:

İşlem 1 : new int

İşlem 2 : İşlem 1 + n

 

New operatörü tahsisat işlemini yapamazsa 0 değerini(NULL gösterici) üretir.

 

/*——-freestor.cpp——*/

/*free store alanının hesaplanması*/

#include <stdio.h>

 

#define BLOCKSIZE       1024

 

void main(void)

{

    long size = 0;

    char *p;

 

    for(;;){

        p = new char[BLOCKSIZE];

        if(p == NULL)

            break;

        size += BLOCKSIZE;

    }

    printf(“Free store size = %ld\n”, size);

}

/*—————————*/

 

Köşeli parantez içerisine yazılan ifade sabit ifadesi olmak zorunda değildir.

 

/*———–new2.cpp———*/

/*Tam olarak ad sosay uzunluğu kadar bellek tahsis eden fonksiyonun kullanılışı*/

#include <stdio.h>

#include <stdlib.h>

 

char *getname(void)

{

    char *p;

    char buf[80];

 

    printf(“Adı Soyadı:);

    gets(buf);

    p = new char[strlen(buf) + 1)];

    if(p == NULL){

        printf(“Cannot allocate memory..\n”);

        exit(1);

    }

    strcpy(p, buf);

    return p;

}

 

void main(void)

{

char *p;

 

    p = getname();

    puts(p);

}

/*——————————–*/

Kategoriler: C++ Programlama, Yazılım

Tags: , ,

Yorumlar

Yorum Yok

Yorumunuzu Ekleyin

Yorum eklemek için giris yapmalısınız.