C++ Püf Noktalari Nelerdir

Kurtbeyi

Misafir Editör
Katılım
5 Şubat 2022
Mesajlar
501
Tepkime puanı
44
Konum
istanbul
Cinsiyet
  1. Bay
Takım
Fenerbahçe
Püf Noklarını Aşağıdaki Örnekler ile sizlere açıklanmıştır.
**** function1(****);
**** funciton2();

int main()
{

char ch = 'a';
function1();
function2(33, ch);
return 0;

}
**** function1(****)
{
printf("In function1\n");
}

**** function2()
{
printf("In function2\n");
}
**** function1(****);
**** function2();

fonksiyon prototipleri arasındaki fark nedir?
Parametresi **** olarak belirlenmiş bir fonksiyon, C dili standartlarına göre hiçbir parametre almaz.

Parametre parantezlerine hiçbir değer girilmemiş fonksiyon ise, parametre kontrolünün yapılmayacağı anlamına gelir. Yani bu fonksiyon çağrılırken istenilen türde ve sayıda parametre alabilir. Tür ve parametre sayı kontrolü yapılmaz..

int main()
{

int a=1;
switch(a)
{
int b=20;
case 1:
printf("b is %d\n",b);
break;
default:
printf("b is %d\n",b);
break;
}
return 0;

}

Bu kodda ise, ekrana " b is 20" yazılmasını bekleyeceksiniz. Ancak 20 yerine çok tuhaf bir sayı gelecektir. Neden?

switch bloğu içinde yeni bir değişken tanımlanıp ilk değer verilmiştir. Bu tamamen hatalı bir durumdur. switch bloğunun dışında tanımlanıp yine switch bloğu içerisinde değer atanırsa yine ekrana istenilen değer yazılmayacaktır.

Yapılması gereken, int b = 20; ifadesi switch bloğunun dışında bildirilmelidir.

#define SIZE 10
**** size(int arr[SIZE])
{
printf("size of array is:%d\n", sizeof(arr));
}

int main()
{
int arr[SIZE];
size(arr);
return 0;
}

Burada ise yapılmak istenen arr dizisinin kaç bitlik boyut kapladığını bulmaktır. Beklenen cevap integer türünün 4 bit olarak tutulduğu sistemlerde 40'tır. Ancak bu soruda cevap 4 olacaktır.

Sebep? size() fonksiyonuna parametre olarak geçirilen arr, sadece bir göstericidir. Yani bu fonksiyon o göstericinin boyutunu hesaplar. Ekrana çıkan 4 sonucu, bir integer sabiti gösteren göstericinin boyutudur.

int main()
{

char c;
scanf("%c",&c);
printf("%c\n",c);

scanf(" %c",&c);
printf("%c\n",c);

system("pause");
return 0;

}
İlk scanf fonksiyonunun kullanımı ile ikinci scanf fonksiyonunun kullanımı arasındaki farkı görebildiniz mi? 1. kullanım doğru iken, 2.sinde küçük bir bug var. Yani scanf(" %c", &c) ifadesinde, % karakterinden önce bir boşluk bırakılmış. Bu boşluğun scanf tarafından yorumlanışı bizim istemediğimiz bir şekilde olacaktır. Yani bir karakter girdiğimizde onu alıp işlemeyecektir (boşluk yüzünden).

Sonuç olarak, printf fonksiyonunda parametreler arasna istediğimiz kadar boşluk koyabiliriz. Bu boşluklar, değerlerin ekrana yazılmasında rol alır. Ancak scanf fonksiyonunda yanlışlıkla kullanılacak bir boşluk, girilen değerlerin sırasını alt-üst edecektir.

int main()
{

int i;
i = 10;
printf("i : %d\n",i);
printf("sizeof(i++) is: %d\n", sizeof(i++));
printf("i : %d\n",i);
return 0;

}
Burada ise sizeof(i++) ifadesi ile i değerinin bir artarak ikinci printf fonksiyonunda ekrana 11 değerinin yazılması beklenir. Ancak sizeof(i++), sizeof(++i) ve sizeof(i) aynı şekilde çalışır. Yani ++ operatörünün yan etkisi çalışmaz.
#define PrintInt(expr) printf("%s : %d\n", #expr,(expr))
int main()
{

int y = 100;
int *p;
p = (int*)malloc(sizeof(int));
*p = 10;
y = y/*p; /*dividing y by *p */;
PrintInt(y);
return 0;

}

Ekrana 10 yazılmasını beklerken 100 yazılıyor. Kodu dikkatlice incelerseniz, y = y/*p ifadesinde bir tuhaflık olduğunu göreceksiniz. Bu kodun bulunduğu satıra yazılan yorum sayesinde, *p değişkeni gözden kaçırılıyor. Yani yorum satırı y'den sonraki /* karakterleriyle başlıyor. Ve istenilen sonuç yerine y = y ifadesinin sonucu yazılıyor. Gösterici işaretinin ve yorum satırlarının kullanımına dikkat etmek gerek. Burada, / atomundan sonra bir boşluk verilerek bug düzeltilir.

y = y / *p;
 
Benzer konular Forum Tarih
Kurtbeyi C ve C++ 2 193
Kurtbeyi C ve C++ 1 192
Kurtbeyi C ve C++ 2 173
Kurtbeyi C ve C++ 1 192
Kurtbeyi C ve C++ 1 153

Benzer konular

İçerik sağlayıcı "paylaşım" sitelerinden biri olan Harbimekan.Com Forum, Eğlence ve Güncel Paylaşım Platformu Adresimizde 5651 Sayılı Kanun’un 8. Maddesine ve T.C.K’nın 125. Maddesine göre TÜM ÜYELERİMİZ yaptıkları paylaşımlardan sorumludur. Harbimekan.Com sitesindeki konular yada mesajlar hakkında yapılacak tüm hukuksal Şikayetler için info@harbimekan.com yada iletişim sayfası üzerinden iletişime geçilmesi halinde ilgili kanunlar ve yönetmelikler çerçevesinde en geç 3 Gün (72 Saat) içerisinde Forum yönetimi olarak tarafımızdan gereken işlemler yapılacaktır.

Bu Site, Bilim ve Sağlık Haber Ajansı Üyesidir.

Yığıntı - 8kez - kaynak mağazam - Uğur Ağdaş