PDA

Tam Sürümünü Görmek İçin : char[] sözdizimi ile ilgili çifte standart


mr1yh1
28/05/2005, 22:22
yazdığım bir programda,
dikkatsizliğim yüzünden başıma iş açtım..
aşağıdaki kod bu durumu özetliyor..
#include <iostream>
using namespace std;
char array1[]={'a','b'};
char array2[]={'2','3'};
void foo(char array[]){
int i = sizeof(array);
//sonuncu elemani yaz.
cout<<array[i-1]<<endl;
}
int main (){
foo(array1);
return 0;
}
eğer
char array1[]="ab";
char[] array = array1 yazmış olsaydım
derleyici hata verir, array[] ın derleme zamanında belirlenmesi gerektiğini söylerdi.

fakat , fonksiyonun parametrelerinin deklarasyonu için
void foo( char array[] )
yazdığımda sessiz kalıp
array ı bir char* olarak değerlendiriyor..
dolayısı ile sizeof() fonksiyonu işe yaramaz hale geliyor..( yanıltıcı bir değer döndürüyor )
peki neden C bana bu oyunu oynuyor ? :confused:


sckz
28/05/2005, 23:25
valla ben hertürlü denedim.. i yi 4 buluyo... hatta array1 ile array2 nin adreslerine watch tan baktım aradaki fark 4.. dolayısıyla i-1 de bize b sonucunu vermiyo.. bende şimdi anlam vermeye çalışıyorum.. benzer ifade yi (i icin yazılan) main altında yazdığımda 3 değerini buluyo...

karamemed
28/05/2005, 23:33
Sizeof türün bellekte kapladığı alanı vermiyormuydu? yani int için 4, char için 1 vs. dolayısıyla bir gösterge için 4 verecektir. Tabi başka bir kullanımı yoksa.

mr1yh1
29/05/2005, 00:02
valla ben hertürlü denedim.. i yi 4 buluyo... hatta array1 ile array2 nin adreslerine watch tan baktım aradaki fark 4.. dolayısıyla i-1 de bize b sonucunu vermiyo.. bende şimdi anlam vermeye çalışıyorum..

anlamı şu..
char array[] ı char* array olarak değerlendiriyor..
bir işaretçi bellek adresi tutan birşeydir..
dolayısı ile 4 baytlık ( 32 bit ) bir değer vermesinin nedeni bu..

ama neden aynı sentaxı , normal deklarasyonda farklı ,
fonksiyon parametresinin deklarasyonunda farklı değerlendiriyor..
hata/uyarı vermesi gerekmez miydi ?

sckz
29/05/2005, 00:11
ya.. tabiii mr1yh1 +1

sckz
29/05/2005, 00:15
genclik msn adresim profilimde var.. beni eklerseniz sizi ekleyebilme şansını bulmuş olurum..

sckz
29/05/2005, 00:28
....