Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => C/C++ => Konuyu başlatan: oyhan - 30 Ağustos 2017, 03:56:11

Başlık: Birden Fazla Tek Boyutlu Dizi
Gönderen: oyhan - 30 Ağustos 2017, 03:56:11
Merhaba
Kodun içerisinde birden fazla dizi aşağıdaki gibi tanımlanmış durumda.

const unsigned short M1[33]=0x4705,0x4403,........};
const unsigned short M2[29]={0x4601,0x4601,......};
const unsigned short M3[31]={0x4405,.......};

Bir alttaki bölümde de for döngüsüne sokarak işlem yapıyorum.
M1 yerine M2 yazacağım zaman bu döngüyü tekrar hazırlamak yerine bütün işlemleri tek bir döngüde nasıl yaparım. Yani global bir dizi değişkenine diğer dizileri alabilir miyim. Malum boyutları farklı. (stm32F0 ile çalışıyorum.) Teşekkürler.

for (i=0; i<sizeof(M1); i++) {
         characters=M1;
                   ..
                   ..
         }
Başlık: Ynt: Birden Fazla Tek Boyutlu Dizi
Gönderen: sovalye - 30 Ağustos 2017, 08:29:33

#include <stdio.h>

int main (void){
        int a0[4]={1,2,3,4};
        int a1[2]={11,12};
        int a2[4]={21,22,23,24};
        int a3[3]={31,32,33};
        int *a[4]={a0,a1,a2,a3};
        printf("%d",a[0][3]);
        return 0;

}
Başlık: Ynt: Birden Fazla Tek Boyutlu Dizi
Gönderen: vitruvius - 30 Ağustos 2017, 10:31:25
Diziyi parametre olarak alan bir fonksiyon hazırlasan?
Başlık: Ynt: Birden Fazla Tek Boyutlu Dizi
Gönderen: oyhan - 30 Ağustos 2017, 13:59:02
Nasıl mesela? Sanırım benim ihtiyacım dinamik dizi yapısı oluyor. Buna biraz çalışmama gerekiyor.
Başlık: Ynt: Birden Fazla Tek Boyutlu Dizi
Gönderen: sovalye - 30 Ağustos 2017, 14:21:00
Dinamik bellek yonetimi, dizilerin boyutu calisma aninda degisiyorsa kullanilir. Sizinki degismiyor.


Attigim koda baktiniz mi?
Başlık: Ynt: Birden Fazla Tek Boyutlu Dizi
Gönderen: kimlenbu - 30 Ağustos 2017, 14:30:52
uint8_t i;

for(i=0;i<33;i++){

if(sizeof(M1)<i){//M1 işlemleri}
if(sizeof(M2)<i){//M2 işlemleri}
if(sizeof(M3)<i){//M3 işlemleri}

}
Başlık: Ynt: Birden Fazla Tek Boyutlu Dizi
Gönderen: oyhan - 30 Ağustos 2017, 19:20:26
Merhaba
sovalye koda baktım.
Burada a[0][3] ile tüm dizilerin ilk adresi pointerda saklanmış oluyor.
Dolayısı ile mevcut dizinin büyüklüğü alınarak pointerda ilgili dizinin başlangıç adresinden itibaren veriler işleme alınacak değil mi?
Başlık: Ynt: Birden Fazla Tek Boyutlu Dizi
Gönderen: sovalye - 30 Ağustos 2017, 20:00:34
Alıntı yapılan: oyhan - 30 Ağustos 2017, 19:20:26
Merhaba
sovalye koda baktım.
Burada a[0][3] ile tüm dizilerin ilk adresi pointerda saklanmış oluyor.
Dolayısı ile mevcut dizinin büyüklüğü alınarak pointerda ilgili dizinin başlangıç adresinden itibaren veriler işleme alınacak değil mi?

a[0][3] öylesine bi değeri ekrana bastırmıştım. Yazdığınızdan ne şekilde anladığınızı tam çıkaratamadım. Doğru gibi görünüyor ama isterseniz yine de özetleyeyim.

Resimdeki gibi olay. Sizin elinizde m1, m2, m3 diiye diziler var. "m1" bu dizinin başlangıç adresi olan pointer. Sonra ben m diye bir pointer dizisi tanımladım( "m" **int türünde). m dizisinin elemanlarına da bu m1, m2, m3 ün başlangıç adreslerini koydum. m[2] diyinde artık m2 pointer ina erişiyorum ve m[2][3] dersem m2 +3 adresindeki elemana erişiyorum. Yani m2'nin 4. elemanı.
(https://i.stack.imgur.com/bnlQk.jpg)


Başlık: Ynt: Birden Fazla Tek Boyutlu Dizi
Gönderen: burç tankal - 31 Ağustos 2017, 02:47:36
Alıntı yapılan: sovalye - 30 Ağustos 2017, 20:00:34
a[0][3] öylesine bi değeri ekrana bastırmıştım. Yazdığınızdan ne şekilde anladığınızı tam çıkaratamadım. Doğru gibi görünüyor ama isterseniz yine de özetleyeyim.

Resimdeki gibi olay. Sizin elinizde m1, m2, m3 diiye diziler var. "m1" bu dizinin başlangıç adresi olan pointer. Sonra ben m diye bir pointer dizisi tanımladım( "m" **int türünde). m dizisinin elemanlarına da bu m1, m2, m3 ün başlangıç adreslerini koydum. m[2] diyinde artık m2 pointer ina erişiyorum ve m[2][3] dersem m2 +3 adresindeki elemana erişiyorum. Yani m2'nin 4. elemanı.
(https://i.stack.imgur.com/bnlQk.jpg)

Bu benim de sıkıntı yaşadığım bir konuydu. Güzel çözüm için teşekkürler sovalye.
Başlık: Ynt: Birden Fazla Tek Boyutlu Dizi
Gönderen: oyhan - 02 Eylül 2017, 13:53:12
Teşekkürler. Anladım. Çok pratik bir yöntem..