Struct isteyen bir fonksiyona parametre gönderme hakkında

Başlatan strom, 12 Şubat 2015, 20:48:12

strom

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ı?

Erhan YILMAZ

#1
Sorunun yanıtı burada verilmiş heralde.

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;
}

ERdow

Şu şekilde yapılıyor diye hatırlıyorum.

blabla( (RECT){.x=0, .y=0, .width=100, .height=100} );

Gökhan BEKEN

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;
}
Özel mesaj okumuyorum, lütfen göndermeyin.

vsalma

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)

strom

Ç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.