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;
..
..
}
#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;
}
Diziyi parametre olarak alan bir fonksiyon hazırlasan?
Nasıl mesela? Sanırım benim ihtiyacım dinamik dizi yapısı oluyor. Buna biraz çalışmama gerekiyor.
Dinamik bellek yonetimi, dizilerin boyutu calisma aninda degisiyorsa kullanilir. Sizinki degismiyor.
Attigim koda baktiniz mi?
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}
}
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?
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)
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.
Teşekkürler. Anladım. Çok pratik bir yöntem..