C++ pointerler ile ilgili çalışmam "C++ çalışmak çok zevkliymiş"

Başlatan tekniker_murat, 24 Aralık 2019, 20:11:50

tekniker_murat

#include <stdio.h>
#include <iostream>
using namespace std;

int a=21; // int tipinde a isimli bir değişken tanımlanıyor ve içeriğine 21 sayısı yükleniyor...

int *ptr=&a; // int tipinde *ptr ile ptr adında bir gösterici ( pointer ) tanımlanıyor ( göstericiler bir başka değişkenin ram içindeki adresini tutan //değişkenlerdir... *ptr=&a komutu ile a değişkeninin ram adresi ptr içinde tutuluyor... & İFADESİ adres gösterici ifadedir...

int main(){ // main bloğu başlatılıyor

printf("\tA degiskeninin icerigi : %d",a); // a değişkeninin içi ekrana yazdırılıyor...

printf("\n\n\tA degiskeninin adrei : %x",&ptr); // a değişkeninin ram adresi *ptr de kayıtlı olduğu için a değişkeninin adresi ekrana yazdırılıyor

printf("\n\n\tBakalim oldu mu ? *ptr degiskeni icinde a nin degeri var mi ? %d",*ptr); // // *ptr nin özelliği kullanılarak a değişkeninin içi tekrar ekrana yazdırılıyor...

printf("\n\n\tEvet goruldugu gibi a degiskeninin ici 21 olarak ekranda yazdi.");

printf("\n\n\tSimdi *ptr nin icini yani a degiskeninin icini degismeye calisacagim bakalimm olacak mi ?");

*ptr=17; // Burada *ptr nin içine 17 yükleniyor ve alt satırda a değişkenine olan etkisini gösteriyorum.

printf("\n\n\tOnce *ptr'nin icini gorelim : %d",a); // *ptr nin içine 17 yüklediğim zaman a değişkeninin içi değişiyor demek ki 

////// POINTER GÖSTERİLEREK ADRESİ TUTULAN REGİSTER İÇİNE ETKİ EDİLEBİLİYORMUŞ  //////////////////

printf("\n\n\tEvet goruldugu gibi a degiskeninin ici *ptr=17 diyerek degistirildi...");

printf("\n\n\tDEMEK Ki POINTER iLE DEGiSKEN iCi DEGiSiYORMUS.");

printf("\n\n\t SAYGILARIMLA MURAT YAGCI...");

}


Bana ve benim gibi konuyu bilmeyen arkadaşlara zaman ayırıp yardımcı olan veya olmaya çalışan herkese sonsuz kere teşekkür ediyorum...
[email]murat.yagci.1984@gmail.com[/email]

MC_Skywalker


taydin

Editörün üstündeki butonlardan birisi "Code". Konuya bir program ekleyeceğin zaman onu kullanarak eklersen programın daha düzgün görünür ve daha kolay okunabilir. Örnek:

#include <stdio.h>

int main(void)
{
    printf("Hello world!\n");
    return 0;
}
Timur Aydın (mekatronik.org)

fide

@tekniker_murat güzel çalışma olmuş. Hem c hem de mcu tarafında kaç zamandır pointer olayını anlamaya çalışıyorum. Kafamın basmadığı nokta doğrudan değişkene ulaşmak varken niye ptr kullanıyoruz? Değişkenin tutulduğu adres ile işimiz nedir? Ptr çok kullanılıyor bunu biliyorum ama bunu bu kadar cazip ve kullanışlı yapan nedir?
Kod kısmı tamam ama neden gerekli olduğunu ve avantajını açıklarsanız memnun olurum.
Kolay gelsin
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

tekniker_murat

Alıntı yapılan: taydin - 24 Aralık 2019, 20:35:56Editörün üstündeki butonlardan birisi "Code". Konuya bir program ekleyeceğin zaman onu kullanarak eklersen programın daha düzgün görünür ve daha kolay okunabilir. Örnek:

#include <stdio.h>

int main(void)
{
    printf("Hello world!\n");
    return 0;
}

@taydin abi söylediğini dikkate alacağım...



Alıntı yapılan: fide - 24 Aralık 2019, 21:35:39@tekniker_murat güzel çalışma olmuş. Hem c hem de mcu tarafında kaç zamandır pointer olayını anlamaya çalışıyorum. Kafamın basmadığı nokta doğrudan değişkene ulaşmak varken niye ptr kullanıyoruz? Değişkenin tutulduğu adres ile işimiz nedir? Ptr çok kullanılıyor bunu biliyorum ama bunu bu kadar cazip ve kullanışlı yapan nedir?
Kod kısmı tamam ama neden gerekli olduğunu ve avantajını açıklarsanız memnun olurum.
Kolay gelsin

@fide abi şu anda sadece mantığını anladığım ve uygulama olarak oturtmaya çalıştığımı söyleyebilirim yani neden kullanışlı onu bilmiyorum ama elbet bir yerde işimize yarayacaktır...

Mesela halen daha çalışma mantığını çözemediğim strtok fonksiyonunda kullanılan bir olay kaç kişi örnekler ile gösterdi ise de bir türlü çalışmasını anlayamadım lakin orada da kullanılıyor...

O kadar uğraşmama rağmen satır satır yorumlayamıyorum şu strtok'u ve projemde de çok kullanılıyor...

Demek istediğim bilgi bilgidir öğrenelim lazım olunca kullanırız :D
[email]murat.yagci.1984@gmail.com[/email]

bsenguler

sizin c++ daha çok c olmuş, iostream i eklemişsiniz, üzerine bir de using namespace std; eklemişsiniz ama nimetlerinden faydalanmayıp cout<< yerine printf kullanmışsınız. c++ da desimal vs kullanmaya da gerek yok:)

Misal vermek gerekirse

C'de yazılışı                                    C++'da yazılışı

printf("\tA degiskeninin icerigi : %d",a);      cout<<"\t degiskenin icerigi :"<< a;

tunayk

Alıntı yapılan: fide - 24 Aralık 2019, 21:35:39@tekniker_murat güzel çalışma olmuş. Hem c hem de mcu tarafında kaç zamandır pointer olayını anlamaya çalışıyorum. Kafamın basmadığı nokta doğrudan değişkene ulaşmak varken niye ptr kullanıyoruz? Değişkenin tutulduğu adres ile işimiz nedir? Ptr çok kullanılıyor bunu biliyorum ama bunu bu kadar cazip ve kullanışlı yapan nedir?
Kod kısmı tamam ama neden gerekli olduğunu ve avantajını açıklarsanız memnun olurum.
Kolay gelsin

C/C++ konusunda üstadlar elbet daha iyi açıklarlar ancak kısaca söylebecek olursa, dizi elemanlarının herbirine bir değişken tanımlamak yerine, indexleme yoluya istediğin elemana kolaycak ulaşmak en önemli kullanım şeklidir. Burada diziden kasıt, veri uzunluğu bilinen herhangi bir tipteki eleman dizisi. Bu bir byte dizisi olabileceği gibi, bir LCD ekran menü eleman dizisi de olabilir. Menudeki herbir eleman hafızada 20byte yer kaplıyorsa, siz ilk eleman adresini işaretçiye yüklersiniz sonrada işaretçiyi (istenen eleman sırası * eleman uzunluğu) kadar arttırıp doğrudan elemana ulaşırsınız.  Benzer şekilde haberleşme kodlarında, lookup table vb. pekçok yerde karşımıza çıkar. Dikkatli kullanılmazsa hata yapmaya son derece müsait olup programın çakılmasına neden olur.
Bu şekilde kullanım, kapsamlı programlarda daha az kod yazarak aynı sonuçları almanızı sağlar.

bsenguler

@fide hocam,
işaretçileri anlamak için en en basit şekli olarak bağlı listelere (linked-list) bakmanızı tavsiye ederim, basitçe dinamik bir dizi(tabiki c++ nesneye dayalı olduğu için, burada bir nesne tutulması daha doğru olur) diyebiliriz, istediğiniz kadar(hafızaya bağlı tabii ki:)) uzatıp, kısaltabilirsiniz. Burada ki mantığı çözdüğünüz vakit, siz işaretçiyi nerde isterseniz kullanırsınız:)

taydin

Alıntı yapılan: tekniker_murat - 24 Aralık 2019, 23:40:57Mesela halen daha çalışma mantığını çözemediğim strtok fonksiyonunda kullanılan bir olay kaç kişi örnekler ile gösterdi ise de bir türlü çalışmasını anlayamadım lakin orada da kullanılıyor...

O kadar uğraşmama rağmen satır satır yorumlayamıyorum şu strtok'u ve projemde de çok kullanılıyor...

Yılmadan üzerinde uğraşmaya devam et. Teknik konularda öğrenme hep bu şekilde oluyor. Uzun süre çok az bir ilerleme oluyor, sonra birden bir aydınlanma yaşıyorsun ve büyük bir sıçrama yapıyorsun.

Öğrenme işine de doğrudan C++ olarak başlarsan daha iyi olur. Hem C de edindiğin kötü alışkanlıklardan kurtulma derdin olmaz, hem de daha kısa zamanda daha az bug'lı kod yazarsın.

İyi ve doğru alışkanlıkları baştan edinmek önemlidir. Mesela C++ ile ilgili internetteki örneklerin tamamında program başında:

using namespace std;

vardır. Bu şekilde bir kullanım, C++ ın namespace özelliğinin getirdiği faydayı tamamen ortadan kaldırıyor. O yüzden bu kötü alışkanlığı daha baştan edinme ve o satırı da programın başına koyma. Onun yerine, nerede gerekiyorsa std önekini orada koy:

#include <iostream>

int main()
{
   std::cout << "Hello world" << std::endl;
   return 0;
}
Timur Aydın (mekatronik.org)

tekniker_murat

@taydin abi sanırım bu şekilde bir öneride bulunmuşsun...


#include	<iostream>

int	main(){

   std::cout  << "\t\tSELAM KULLANICI" <<	std::endl;
	
	std::cout	<<"\t\tBEN BiR C KODUYUM !!!"	<<	std::endl;
	
	printf("\n\n\t\tMURO");

return	0;
	
}
[email]murat.yagci.1984@gmail.com[/email]

OG

FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

JOKERAS

Hocam Gürbüz Aslan, "C bir Gösterici dilidir" derdi.
Gerektiğinde Kullanmak Çok keyfili oluyor.Çok datlu:)

taydin

Alıntı yapılan: tekniker_murat - 25 Aralık 2019, 04:05:59@taydin abi sanırım bu şekilde bir öneride bulunmuşsun...

Evet o şekilde CODE taglerinin arasına alıyorsun, orası tamam da, kodu yazarken de belli bir düzene göre yazmaya çalış. Satırın biri sola dayalı diğer yarım sayfa sağda, kimi yerde iki satır boşluk kimi yerde hiç yok şeklinde yazma.

Hep kodda belli bir estetik, belli bir simetri olmasına özen göster. Bu hem hata yapma olasılığını azaltır, hem de başkası senin koda baktığında "bu adam gerçekten işini severek yapıyor" diye düşünür :)

Öğrenirken projeler seçip o projeleri tamamlamaya çalışırsan daha iyi öğrenirsin. Al sana bir başlangıç projesi:

Öyle bir program yaz ki, komut satırında çalışsın ve bir text dosyasının ismini argüman olarak alsın. Sonra da o text dosyasında kaç tane kelime var saysın ve ekrana yazsın. Kelimeler birbirinden boşluk, TAB, ve newline ile ayrılır.

$ cat a.txt
bir iki    uc
    dort
bes
alti
$
$ ./kelimesay a.txt
a.txt dosyasında 6 kelime var
$
Timur Aydın (mekatronik.org)