• Web sitemizin içeriğine ve tüm hizmetlerimize erişim sağlamak için Web sitemize kayıt olmalı ya da giriş yapmalısınız. Web sitemize üye olmak tamamen ücretsizdir.
  • Sohbetokey.com ile canlı okey oynamaya ne dersin? Hem sohbet et, hem mobil okey oyna!
  • Soru mu? Sorun mu? ''Bir Sorum Var?'' sistemimiz aktiftir. Paylaşın beraber çözüm üretelim.

C++ Püf Noktalari Neler Dir

Üyelik Tarihi
7 Ocak 2015
Konular
4,091
Mesajlar
4,274
MFC Puanı
40
Kod:
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;
 
Üst