PDA

Tam Sürümünü Görmek İçin : C' de fonksiyona array yollamak?!?


chaylock
06/11/2006, 12:39
C çok iyi bilmiyorum, Java bildiğim için zaten C' de bazı şeylerde çok takılabiliyorum.. Bu da bunlardan bir tanesi..

C' de bir 2D array yaptım, ve bunu bir fonksiyona yolladım, fonksiyonda referance olarak alıp sonra içeriğini kullanmaya çalıştığımda segmentation fault veriyor..

kod olarak şöyle:

int fonksiyon(int** array) {

return array[0][0];
}

int main() {

int a[1][1];
a[0][0] = 3;
printf("sayi: %d" ,fonksiyon(a));
return 1;
}

Bir fonksiyona 2D array.i nasıl yollamalıyım? Bu üstteki çalışmıyor ve dediğim giib segmentation fault veriyor.

Teşekkürler şimdiden..

DİPNOT: Linux - GCC' de derleniyor program


Kögüdey Meygen
06/11/2006, 13:20
Warning 1 warning C4047: 'function' : 'int **' differs in levels of indirection from 'int [1][1]' c:\documents and settings\me\my documents\visual studio 2005\projects\f1\f.c 11
Warning 2 warning C4024: 'fonksiyon' : different types for formal and actual parameter 1 c:\documents and settings\me\my documents\visual studio 2005\projects\f1\f.c 11
------------
şöyle değiştirirsek sorun kalmıyor.

int **a;
a=(int **)malloc(sizeof(int *)*1);
a[0]=(int *)malloc(sizeof(int)*1);

a[0][0] = 3;
printf("sayi: %d" ,fonksiyon(a));

ortug
06/11/2006, 13:35
statik olarak yarattığımız iki boyutlu dizileri bir fonksiyona alırken dizinin ikinci boyutunun uzuluğunu giriyoruz.
#include <stdio.h>

int fonksiyon(int array[][1] ) {

return array[0][0];
}

int main() {

int a[1][1];
a[0][0] = 3;
printf("sayi: %d" ,fonksiyon(a));
return 1;
}
Böyle bir sorunla zamanında ben de karşılaşmıştım. İşimi halledip ayrıntısına inmemiştim. Daha tecrübeli arkadaşlar bunun neden böyle olduğunu açıklarlarsa iyi olur

chaylock
06/11/2006, 13:39
statik olarak yarattığımız iki boyutlu dizileri bir fonksiyona alırken dizinin ikinci boyutunun uzuluğunu giriyoruz.
#include <stdio.h>

int fonksiyon(int array[][1] ) {

return array[0][0];
}

int main() {

int a[1][1];
a[0][0] = 3;
printf("sayi: %d" ,fonksiyon(a));
return 1;
}
Böyle bir sorunla zamanında ben de karşılaşmıştım. İşimi halledip ayrıntısına inmemiştim. Daha tecrübeli arkadaşlar bunun neden böyle olduğunu açıklarlarsa iyi olur
çok teşekkürler.. bende merak ettim açıkçası..

chaylock
06/11/2006, 15:13
sorumu biraz daha genişletmek istiyorum.. bu seferde

int fonksiyon (int array[][1]) {

}

parametredeki array.in ikinci uzunluğunu parametre olarak almasını nasıl sağlarım?

şunu denedim olmadı:

int fonksiyon (int array[][row], int row) {

}

quasimodo
06/11/2006, 19:12
sorumu biraz daha genişletmek istiyorum.. bu seferde

int fonksiyon (int array[][1]) {

}

parametredeki array.in ikinci uzunluğunu parametre olarak almasını nasıl sağlarım?

şunu denedim olmadı:

int fonksiyon (int array[][row], int row) {

}


C ve C++ ta Dizilere ilk boyutu vermeden kullanamazsın ancak

#define row 12;

int fonk_(int array[][row], int a)
{
/*Bir şeyler yap*/
}

gibi olabilir

Revne
07/11/2006, 00:04
Belki boyle bir sey işine yarayabilir...

int func(int *p)
{
return p[0];
}

int main(int argc, char* argv[])
{
printf("Hello World!\n");
int arr[1][1];
arr[0][0]=100;
int *deneme=arr[0];
printf("%d",func(deneme));
getchar();
return 0;
}


Kolay Gelsin