Birden Fazla Tek Boyutlu Dizi

Başlatan oyhan, 30 Ağustos 2017, 03:56:11

oyhan

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;
                   ..
                   ..
         }
BİRLİKTEN KUVVET DOĞAR:

sovalye

#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;

}

vitruvius

Diziyi parametre olarak alan bir fonksiyon hazırlasan?

oyhan

#3
Nasıl mesela? Sanırım benim ihtiyacım dinamik dizi yapısı oluyor. Buna biraz çalışmama gerekiyor.
BİRLİKTEN KUVVET DOĞAR:

sovalye

Dinamik bellek yonetimi, dizilerin boyutu calisma aninda degisiyorsa kullanilir. Sizinki degismiyor.


Attigim koda baktiniz mi?

kimlenbu

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}

}

oyhan

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?
BİRLİKTEN KUVVET DOĞAR:

sovalye

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ı.




burç tankal

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ı.
(Resim gizlendi görmek için tıklayın.)

Bu benim de sıkıntı yaşadığım bir konuydu. Güzel çözüm için teşekkürler sovalye.

oyhan

Teşekkürler. Anladım. Çok pratik bir yöntem..
BİRLİKTEN KUVVET DOĞAR: