#include<stdio.h> int main( void ) { int i = 0; for( i; i < 12; i++ ) { if( ( i++ + 1 ) == 5 ) printf( "%d\n",i ); else if( i % 2 == 0 ) break; else if( i % 3 == 0) continue; else printf("%d\n", i ); } return 0; } Burada döngü neden ekrana 1-5-7-11 basıyor anlayamadım,izah edebilir misiniz? |
C++ için en azından int* ptr; int * ptr; int *ptr; bunlardan hangisi doğrudur? yani hiç biri derleme de hata vermiyor fakat yazım kuralları ve okunabilirlik açısından hangisi daha çok kullanılır? |
Üçüde doğru. Ben int *ptr; olanı kullanıyorum. |
Üçü de doğru. int* p1,p2; -> ikisi de pointer int *p1,p2; -> sadece p1 pointer |
İkisi de pointer değildir. tür bilgisi int dir, *p1 deklaratördür. * tür bilgisine dahil olmadığı için p2 int türdendir. p1 in türü int *'dır. |
Yanlış hatırlamışım, iyi ki düzeltmişsin. ![]() |
peki bir sorum daha var, her array bi pointer. yani array[2] yerine *array+2 diyebiliriz. peki iki boyutlu yada diğer çok boyutlu diziler de nasıl oluyor onu anlamadım? |
*array + 2 dersen yanlış olur. Bu ilk elemana 2 ekler. Eğer ikinci indise ulaşmak istiyorsan parantez kullanmalısın. *(array + 2) bu şekilde olmalı. 2 Boyutlu diziler içinde aşağıdaki örnek işine yarar.
|
Aşağıdaki değişken tanımlardan hangisi C dilinde hata verir ? a)char w_w; b)float a1b2c3; c)int print; d)int switch; e)char x12345; |
c++
for(i=0;i<=a[ i ][ 0 ];i++){ cout << "\n"; for(j=0;j<=a[j];j++) şu kısmı tam anlayamadım. i bir sayı, dizinin içindeki de harf. nasıl küçük eşit sağlayabiliyoruz? i<=a[0] hangi durumda sağlanıyor, a[0]ın tam sayı değeri mi var? bir de j<=a[j] diyor. 2 boyutlu bir dizi değil mi, neden tek bölüm var? a[1] deseydi neyi belirtmiş olurdu |
Aşağıdaki C programının çıktısı ne olur? main() { int dizi[15]={3, 2, 8, -4, 6}; int i, s=0; for(i=1;i<15;i++) { if (dizi >= 0) s ++; } printf("%d",s); getche(); } |
Arrayın tanımlamadığın değerleri 0 oluyordu galiba ona göre bakarsak s=13 oluyor dizi[1] den başladığından ilk elemanı almıyoruz, toplamda sadece -4 artırmıyor. |
aynen hocam cevap 13 ama biraz daha açıklayacı yazar mısnız ilk defa görüyorum da bu dersi pek anlayamadım o yüzden |
dizi yaratmışsın ama sadece ilk beş elemanına değer vermişsin. Değer vermediğin elemanların değeri otomatik olarak 0 atanır. dizi[0]=3 dizi[1]=2 dizi[2]=8 dizi[3]=-4 dizi[4]=6 dizi 0. indexten başlar. for döngüsü de 1 ile 14 arasındaki sayılar arasında. Bu yüzden senin döngünün içinde 0. indexi görmüyorsun. 0 dan büyük veya eşit olan her değer için s yi 1 artırmakta. getche diye bir şey var mı bilmiyorum da DevC++'da ekran çıktısını görmek için getch->get character kullanırdık. |
eyvallah hocam |
(Yıllar sonra gelen edit) Hocam demin birşey okuyordum da, tartıştığımız konu aklıma geldi, yazmak istedim. Seg-fault korumalı modun bir mekanizması, C ile bir alakası yok. Benim açıklamaya çalıştığım dilin kurallarıydı ki, DOS korumalı mod u kullanmadığı için DOS da stringi değiştirmeye çalışmak undefined behaviour olur ve seg-fault yemezsiniz. Haksız mıyım? |
Bu std::swap fonksiyonu nasil calisiyor? Yani ben swap fonksiyonu yazsam parametre olarak 2 pointer alip degerleri takas ederdim. Boylece degiskenler direk degisirdi. Ama bunda parametreler integer ama yine de degiskenler direk degisiyor. Nasil olutor bu? |
Doğrudur teknik olarak bir engel yok. Fakat korumalı mod olmasa bile sistem uygulamayı kendisinden koruyacaktır. Öyle olmasa hatalı bir adresi gösteren bir işaretçi rahatlıkla programı bozar. İşletim sisteminin olmadığı 8 bitlik gömülü işlemcilerde bile programı koruyan mekanizmalar var. Tabi yine de emin değilim. Dos konusunda ahkam kesecek kadar dinozor değilim çok şükür. ![]() |
C++ ta bir nesneye referans vermenin 2 yolu var. Birincisi senin dediğin C usülü işaretçi-adres olayı. İkincisi çoğu dilde olmayan direkt referans olayı. Bu yöntemde & operatörü ile bir referans tanımlanır ve ona atanan nesne gibi davranır. Yani aynı nesnenin 2. ismi olur. int a = 0; int &b = a; b = 1; a 1 oldu. Link vereyim.http://www.learncpp.com/cpp-tutorial/611-references/ |
Yok hocam onunla bir alakası olduğunu sanmıyorum. Character vector içinde tutuyorum ben binary kodu. 1 char = 1 byte , 8 tane o "/00" karakteri olduğundan 8 byte ekstra geliyor.
Bu mesaja 2 cevap geldi. Cevapları Gizle