Arama butonu
Bu konudaki kullanıcılar: 1 misafir
5
Cevap
1024
Tıklama
0
Öne Çıkarma
C de printf de adres bildirimi sorunu
S
11 yıl
Binbaşı
Konu Sahibi

Arkadaşlar şöyle ufak bir kod parçam var. Amacım rastgele üretilen 10 sayının adreslerini ekrana yazdırmak. Sorun şu ki ??????? yazan yere ne yazacağımı kestiremedim, bulamadım. Yardım edebilecek birisi var mı ?

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

int _tmain(int argc, _TCHAR* argv[])
{
int *p;
p= (int *)malloc(10*sizeof(int));

for (int i=0; i<20; i++) {
*(p+i) = rand();
printf(" Dizini %d. elemaninin adresi = %p dir\n", *(p+i), ??????????);

getchar();
}



S
11 yıl
Yüzbaşı

printf(" Dizini %d. elemaninin adresi = %p dir\n", *(p+i), ??????????);

bi kere bu satırda *(p+i) yerine i+1 yazman gerekiyor yani for daki i'yi yazacaksın sadece i yazarsan 0.elemanından başlar. dizinin kaçıncı elemanı olduğuna ondan ulaşırsın. *(p+i) 'i de soru işaretli kısma yazacaksın

edit: *(p+i) yazarsan sayının kendisini verir (p+i) yazacaksın sadece





< Bu mesaj bu kişi tarafından değiştirildi someonewhoaintbelongshere -- 11 Haziran 2014; 0:50:17 >
Bu mesaja 1 cevap geldi.
T
11 yıl
Binbaşı

quote:

Orijinalden alıntı: Fdumanli

printf(" Dizini %d. elemaninin adresi = %p dir\n", *(p+i), ??????????);

bi kere bu satırda *(p+i) yerine i+1 yazman gerekiyor yani for daki i'yi yazacaksın sadece i yazarsan 0.elemanından başlar. dizinin kaçıncı elemanı olduğuna ondan ulaşırsın. *(p+i) 'i de soru işaretli kısma yazacaksın


İlk söylediğiniz doğru ancak ikinci söylediğinizde yanlış var. Adres yazdırmak istediği yere *(p+i) gönderilirse pointer'ın point ettiği yeri yani elemanın kendisini adres olarak bastırır, yani random sayıların 16 tabanındaki ekranda görünür.

@Sofiman, printf'e ilk argüman olarak Fdumanli'nin dediği gibi (i+1), ikinci argüman olarak da (p+i) gönderirsen görmek istediğin output'u ekranda görebilirsin.


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Sofiman
S
11 yıl
Yüzbaşı

quote:

Orijinalden alıntı: therev

quote:

Orijinalden alıntı: Fdumanli

printf(" Dizini %d. elemaninin adresi = %p dir\n", *(p+i), ??????????);

bi kere bu satırda *(p+i) yerine i+1 yazman gerekiyor yani for daki i'yi yazacaksın sadece i yazarsan 0.elemanından başlar. dizinin kaçıncı elemanı olduğuna ondan ulaşırsın. *(p+i) 'i de soru işaretli kısma yazacaksın


İlk söylediğiniz doğru ancak ikinci söylediğinizde yanlış var. Adres yazdırmak istediği yere *(p+i) gönderilirse pointer'ın point ettiği yeri yani elemanın kendisini adres olarak bastırır, yani random sayıların 16 tabanındaki ekranda görünür.

@Sofiman, printf'e ilk argüman olarak Fdumanli'nin dediği gibi (i+1), ikinci argüman olarak da (p+i) gönderirsen görmek istediğin output'u ekranda görebilirsin.

hocam editlemiştim mesajı bi baksaydınız :)


Bu mesaja 1 cevap geldi.
S
11 yıl
Binbaşı
Konu Sahibi

iKİNİZEDE TEŞEKKÜR EDERİM. Sorun çözüldü. Çok sağolasınız




Bu mesajda bahsedilenler: @therev , @Fdumanli
T
11 yıl
Binbaşı

quote:

Orijinalden alıntı: Fdumanli

quote:

Orijinalden alıntı: therev

quote:

Orijinalden alıntı: Fdumanli

printf(" Dizini %d. elemaninin adresi = %p dir\n", *(p+i), ??????????);

bi kere bu satırda *(p+i) yerine i+1 yazman gerekiyor yani for daki i'yi yazacaksın sadece i yazarsan 0.elemanından başlar. dizinin kaçıncı elemanı olduğuna ondan ulaşırsın. *(p+i) 'i de soru işaretli kısma yazacaksın


İlk söylediğiniz doğru ancak ikinci söylediğinizde yanlış var. Adres yazdırmak istediği yere *(p+i) gönderilirse pointer'ın point ettiği yeri yani elemanın kendisini adres olarak bastırır, yani random sayıların 16 tabanındaki ekranda görünür.

@Sofiman, printf'e ilk argüman olarak Fdumanli'nin dediği gibi (i+1), ikinci argüman olarak da (p+i) gönderirsen görmek istediğin output'u ekranda görebilirsin.

hocam editlemiştim mesajı bi baksaydınız :)

1 dk fark ile gözümden kaçmış :)



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.