Genel 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);
}
/*——————————–*/
Yorumlar
Yorum Yok
Yorumunuzu Ekleyin
Yorum eklemek için giris yapmalısınız.