Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => C/C++ => Konuyu başlatan: strom - 12 Şubat 2015, 20:48:12

Başlık: Struct isteyen bir fonksiyona parametre gönderme hakkında
Gönderen: strom - 12 Şubat 2015, 20:48:12
Mesela şöyle bir struct olsun;

struct RECT
{
  int x;
  int y;
  int width;
  int height;
};

birde fonksyionumuz olsun

void blabla(RECT r)
{
.....
}

Şimdi bu fonksiyonu, bir struct yaratmadan çağırabilir miyiz? Yani şöyle bi kullanım yerine

RECT r = {0, 0, 100, 100};
blabla(r);

şuna benzer bi kullanım var mı?

blabla({0, 0 100, 100});

Yani struct'ı oluşturmadan fonksyionu çağırmanın bir yöntemi var mı?
Başlık: Ynt: Struct isteyen bir fonksiyona parametre gönderme hakkında
Gönderen: Erhan YILMAZ - 12 Şubat 2015, 21:10:26
Sorunun yanıtı burada verilmiş heralde.

http://stackoverflow.com/questions/330793/how-to-initialize-a-struct-in-ansi-c (http://stackoverflow.com/questions/330793/how-to-initialize-a-struct-in-ansi-c)

mesaj birleştirme:: 12 Şubat 2015, 21:24:14

Bende şöyle bir şey yaptım fantezi olsun diye çalışıyor ama pek tavsiye edilmez.


#include <stdio.h>
#include <stdlib.h>

struct RECT
{
  int x;
  int y;
  int width;
  int height;
};

struct RECT kare;

int main(int argc, char *argv[])
{
  int * ptr= &kare;
  *ptr++ = 5;
  *ptr++ = 10;
  *ptr++ = 15;
  *ptr++ = 20;
  printf("x=%d y=%d width=%d height=%d\n",kare.x,kare.y,kare.width,kare.height);
  system("PAUSE");
  return 0;
}
Başlık: Ynt: Struct isteyen bir fonksiyona parametre gönderme hakkında
Gönderen: ERdow - 12 Şubat 2015, 21:32:43
Şu şekilde yapılıyor diye hatırlıyorum.

blabla( (RECT){.x=0, .y=0, .width=100, .height=100} );
Başlık: Ynt: Struct isteyen bir fonksiyona parametre gönderme hakkında
Gönderen: Gökhan BEKEN - 12 Şubat 2015, 21:54:00
Buna neden ihtiyaç duydunuz anlamadım, bence aşağıdaki kullanım daha kolay ve anlaşılır, ben bu şekilde kullanıyorum:

#include <iostream>

using namespace std;


struct hesapla {
    double x,y,z;
};


struct hesapla Hesapla(hesapla *girilen){ // struct parametre alır, struct donderir
    struct hesapla dondurulen;

    dondurulen.x = girilen->x*5;
    dondurulen.y = girilen->y*15;
    dondurulen.z = girilen->z*25;

    return dondurulen;
}

int main ()
{

    struct hesapla eldekiVeriler;
    eldekiVeriler.x=1;
    eldekiVeriler.y=2;
    eldekiVeriler.z=3; 
    struct hesapla gelecekVeriler;
    gelecekVeriler= Hesapla(&eldekiVeriler);   
      cout << gelecekVeriler.x << " , " << gelecekVeriler.y << " , " << gelecekVeriler.z << endl;
return 0;
}
Başlık: Ynt: Struct isteyen bir fonksiyona parametre gönderme hakkında
Gönderen: vsalma - 13 Şubat 2015, 13:36:54
Erdow un dedigi gibi yada member adlarini girmeden de  (RECT){0, 0, 100, 100} oluyor.

Ama tabiki hatirlamakta fayda var: bu sekilde de yapilsa struct instance i yaratiliyor ve fonksiyon parametresi oldugu icin stack ten kullaniliyor. Bu nedenle genelde fonksiyonlara struct gecirilmez struct pointer gecirilir.
Ayni sekilde struct return ederken de stackten kullaniyorsunuz.
Diger bir dezavantajida hiz tabiki.

(kodun c oldugunu varsayiyorum c++ da farkli olusturulabilyordu sanirim)
Başlık: Ynt: Struct isteyen bir fonksiyona parametre gönderme hakkında
Gönderen: strom - 13 Şubat 2015, 17:35:22
Çok teşekkür ederim cevaplar için. Oldukça aydınlatıcı oldu.

@vsalma
Hocam dediğiniz gibi fonksiyona adres olarak göndermek daha avantajlı. Ama en azından tanımlanmış bir structa toplu değer atamanın yolunuda öğrenmiş oldum.