Çözüldü C pointer sorusu

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Katılım
27 Mayıs 2019
Mesajlar
5.685
Çözümler
21
Daha fazla  
Cinsiyet
Erkek
C:
#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
#define prnt(var) printf("The Value=%d\n",var)
int main(int argc, char *argv[]) {
int num[] = {1,3,2,4,3,5,4,2};
int *a = num;
++*a;
a=num;
prnt(*a);
prnt(&num[0]);
prnt(a);
 return 0;
}

Arkadaşlar bu kodla ilgili bir sorum olacaktı size. Şimdi "a" bizim pointerımız. İlk önce A'ya num[0]'ın adresini verdik. Daha sonra bu adresteki sayının değerini 1 arttırdık yani sayı 1'di 2 oldu ama sonra tekrar a = num; yaptığımız için a[0] sayısının adresini saklaması gerekmez mi? Neden prnt(*a) yapınca 2 sayısını gösteriyor?



@Vavien.
 
Çözüm
Tamam da ben ++*a yaptıktan sonra tekrar a=num; yapıyorum dolayısıyla sıfırlanması gerekmiyor mu?
Tanımladığın haline dönmesi için artım sırasında pointer kullanmamalısın. Senin paylaştığın biçimde dizinin elemanlarına müdahale edilmiş oluyor.

C++:
*aPointer = *aPointer + 1;
Dokuzuncu satırdaki kodu açarsak dizinin birinci elemanına atama yaptığını görebilirsin
Sorunun cevabı dokuzuncu satırda. Yıldız işaretini kaldırırsan ilk elemanı gösterir.

Breakpoint ile nerede ne yaptığına bakarsan değerin uçtuğunu anlayacaksın
 
Çünkü değerini değiştirdiniz.
 
Tamam da ben ++*a yaptıktan sonra tekrar a=num; yapıyorum dolayısıyla sıfırlanması gerekmiyor mu?
Tanımladığın haline dönmesi için artım sırasında pointer kullanmamalısın. Senin paylaştığın biçimde dizinin elemanlarına müdahale edilmiş oluyor.

C++:
*aPointer = *aPointer + 1;
Dokuzuncu satırdaki kodu açarsak dizinin birinci elemanına atama yaptığını görebilirsin
 
Son düzenleme:
Çözüm
Tamam da ben ++*a yaptıktan sonra tekrar a=num; yapıyorum dolayısıyla sıfırlanması gerekmiyor mu?
a ya num un işaret ettiği bellek adresini kopyaladın, dolayısıyla a da num da bellekte aynı adreslere işaret ediyor. Herhangi birisiyle yaptığın değişiklik hepsini etkiler, çünkü aynı kaynağa bakıyorlar.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…