Bir başka C pointer sorusu

Başlatan esensoy, 29 Mart 2016, 18:23:28

esensoy

diyelim ki farklı sayfalarda ve structlar içinde 5 tane float değişkenim var,
bunları degisken[] diye bir diziye atıp indis numaralarıyla erişmek istiyorum,

yani;
int* degisken[]={
  &f1,
  &struct1.f2,
  &f3,
  &struct3.f4
};
buraya kadar tamam, değişkene adresler yerleşiyor, ama değerini bir stringe yazdıramadım,

sprintf(str,"%06.03f",*degisken[0]);
doğrusu nasıl olmalı?
En tehlikeli an "zafer" anıdır.

yldzelektronik

Siz o adresteki değeri mi yazdırmak istiyorsunuz yoksa adresi mi?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

pea

float* degisken[]={...


olacak. Dizi içerisinde float pointerları tutuyorsunuz.

Ayrıca ".03f" değil de ".3" kullanın. Oradaki 0'ın bir anlamı yok.

esensoy

#3
Alıntı yapılan: pea - 29 Mart 2016, 18:30:35
float* degisken[]={...


olacak. Dizi içerisinde float pointerları tutuyorsunuz.

Ayrıca ".03f" değil de ".3" kullanın. Oradaki 0'ın bir anlamı yok.
deneyeceğim,
0 ın anlamı olmaz mı hiç, virgülden sonra 3 haneden ufaksa en sağa 3 hane olana kadar 0 ekliyor,

mesaj birleştirme:: 29 Mart 2016, 23:01:02

Tamamdır, istediğim gibi oldu, zahmet edip cevap yazan herkese teşekkürler

kod ise aşağıdaki gibi,
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct DENEME_STRUCT{
    float aa;
    int bb;
    float cc;
};
char str[50];

struct DENEME_STRUCT qq;
float* degisken[];
int main(){

float dd;

degisken[0] = &qq.aa;
degisken[1] = &dd;
degisken[2] = &qq.cc;

qq.cc = M_PI;

sprintf(str,"%06.03f",*degisken[2]);
printf(str);
    printf("Hello world!\n");
    return 0;
}
En tehlikeli an "zafer" anıdır.

pea

Alıntı yapılan: esensoy - 29 Mart 2016, 22:45:53
0 ın anlamı olmaz mı hiç, virgülden sonra 3 haneden ufaksa en sağa 3 hane olana kadar 0 ekliyor,

"%03.5f" yaparsanız da aynı sonucu alırsınız. 0'ın noktanın sağında kaldığında özel bir anlamı yok.
Ayrıca bilerek mi yaptınız bilmiyorum ama, aynı ifadeleri printf içinde de kullanabilirsiniz. sprintf kullanmanıza gerek yoktu.

esensoy

Eve gerçekten de sağdaki 0 ın bir önemi yokmuş,
Dün öğlen olmayışının sebebi de float* degisken[]; i main fonksiyonu içinde tanımlamışım, dışarı çekince çalıştı,

C de printf sprintf farketmiyor ama ben stringi lcd ye yazdırıyorum, dolayısıyla sprintf yapmamk gerekiyor,
C ile ilgili fonksiyonları bu şekilde masaüstü derleyicide deneyip mcu uygulaması içine atıyorum, daha hızlı sonuç alabiliyorum,
En tehlikeli an "zafer" anıdır.