CCS C diziye değer atama

yayha70

Üye
Katılım
25 Eki 2009
Mesajlar
36
Puanları
1
Herkese merhabalar.
CCS C ile bir proje üzerinde çalışıyorum. oluşturacağım bir diziye elde ettiğim rakamları sırasıyla eklemek istiyorum.
Şöyle açıklayayım; 4 basamaklı bir sayıyı sırasıyla bir dizi içinde birleştirmek istiyorum aslında kısaca. bu dört basamağı sayi dizisinin içinde birleştirerek tek bir dizi olarak çıktı almak istiyorum. bir fonksiyon oluşturacağım ve bu fonksiyonun özelliği; ayrı ayrı girilen 4 rakamı tek bir dizide birleştirerek geri dönmesi. örneğin;

int a = 8;
int b = 1;
int c = 6;
int d = 3;

char dizi[]={"8,1,6,3"};

Yazdığım fonksiyondan alacağım çıktı bu şekilde olmasını istiyorum. yani tek bir dizi değişkeni alacağım ve daha sonra başka bir fonksiyonla bu dizinin bütün elemaları ile ayrı ayrı işlem yapacağım. bi türlü mantığını oturtamadım. nasıl yapacağımı da bilemedim. umarım anlatabilmişimdir derdimi. hazır bir kod istemiyorum sadece bilgi ve tecrübesi olan hocalarımdan bir fikir istiyorum. iyi çalışmalar.
 
Diziler aynı türden değişkenlerin hafızada arka arkaya sıralanmış halidir yani ilk değişkenin hafızadaki adresine ulaşırsan hafıza adresini birer artırarak ondan sonrakilere de ulaşırsın. Yeterki dizinin hangi tip bir değişken tuttuğunu ve uzunluğunu bilelim. C dilinde python gibi çoklu eleman veya dizi döndüren fonksiyonlar yazamazsın ama dizinin başlangıç adresini döndüren fonksiyonlar yazabilirsin.

C:
int *dizi_olustur(int a,int b,int c,int d){    //Adres döndüreceği için * operatörü kullan
    static int dizi[] = {a,b,c,d};            //dizinin fonksiyon sonunda silinmemesi için static kullan
    return dizi;                            //dizinin adresini döndür
}

void main(){
    int *dizi;                            //Diziyi tutacak değişken
    int eleman_sayisi = 4;        //dizi_olustur fonksiyonundan dönecek eleman sayısı
   
    dizi = dizi_olustur(5,4,3,2);    //Diziyi oluştur
   
    for(int i=0;i<eleman_sayisi;i++)
        printf("Dizinin %d. elemani: %d\n",i,*(dizi+i));    //Dizi elemanlarını yazdır
   
    //dizi[0] veya *dizi arasında fark yoktur
    //aynı şekilde dizi[1] ve *(dizi+1) arasında da fark yoktur.
}
 
Son düzenleme:
Kod:
dizi[0] = a;
dizi[1] = b;
dizi[2] = c;
dizi[3] = d;

şeklinde olmaz mı?
hocam cevabınız için teşekkür ederim öncelikle. bu şekilde yaptığım zaman fonksiyonun geri dönüşünde sadece dizinin bir elemanını alabiliyorum. ben dizinin tamamını almak istiyorum.
Diziler aynı türden değişkenlerin hafızada arka arkaya sıralanmış halidir yani ilk değişkenin hafızadaki adresine ulaşırsan hafıza adresini birer artırarak ondan sonrakilere de ulaşırsın. Yeterki dizinin hangi tip bir değişken tuttuğunu ve uzunluğunu bilelim. C dilinde python gibi çoklu eleman veya dizi döndüren fonksiyonlar yazamazsın ama dizinin başlangıç adresini döndüren fonksiyonlar yazabilirsin.

C:
int *dizi_olustur(int a,int b,int c,int d){    //Adres döndüreceği için * operatörü kullan
    static int dizi[] = {a,b,c,d};            //dizinin fonksiyon sonunda silinmemesi için static kullan
    return dizi;                            //dizinin adresini döndür
}

void main(){
    int *dizi;                            //Diziyi tutacak değişken
    int eleman_sayisi = 4;        //dizi_olustur fonksiyonundan dönecek eleman sayısı
  
    dizi = dizi_olustur(5,4,3,2);    //Diziyi oluştur
  
    for(int i=0;i<eleman_sayisi;i++)
        printf("Dizinin %d. elemani: %d\n",i,*(dizi+i));    //Dizi elemanlarını yazdır
  
    //dizi[0] veya *dizi arasında fark yoktur
    //aynı şekilde dizi[1] ve *(dizi+1) arasında da fark yoktur.
}
cevabınız için teşekkürler hocam. deneyeceğim şimdi.
Diziler aynı türden değişkenlerin hafızada arka arkaya sıralanmış halidir yani ilk değişkenin hafızadaki adresine ulaşırsan hafıza adresini birer artırarak ondan sonrakilere de ulaşırsın. Yeterki dizinin hangi tip bir değişken tuttuğunu ve uzunluğunu bilelim. C dilinde python gibi çoklu eleman veya dizi döndüren fonksiyonlar yazamazsın ama dizinin başlangıç adresini döndüren fonksiyonlar yazabilirsin.

C:
int *dizi_olustur(int a,int b,int c,int d){    //Adres döndüreceği için * operatörü kullan
    static int dizi[] = {a,b,c,d};            //dizinin fonksiyon sonunda silinmemesi için static kullan
    return dizi;                            //dizinin adresini döndür
}

void main(){
    int *dizi;                            //Diziyi tutacak değişken
    int eleman_sayisi = 4;        //dizi_olustur fonksiyonundan dönecek eleman sayısı
  
    dizi = dizi_olustur(5,4,3,2);    //Diziyi oluştur
  
    for(int i=0;i<eleman_sayisi;i++)
        printf("Dizinin %d. elemani: %d\n",i,*(dizi+i));    //Dizi elemanlarını yazdır
  
    //dizi[0] veya *dizi arasında fark yoktur
    //aynı şekilde dizi[1] ve *(dizi+1) arasında da fark yoktur.
}
hocam bu kodu derlediniz mi siz?

static int dizi[] = {a,b,c,d};

bu satırda hata veriyor? fonksiyon içinde ki diziyi tanımlarken yani.
 
Son düzenleme:
hocam bu kodu derlediniz mi siz?
Tabi ki hayır. CCS C yi en son 2013 yılında kullandım, sana da acilen bırakmanı tavsiye ederim.

Hatanın ne olduğunu bilmeden düzeltme şansım çok az ama CCS dökümanına baktığımda static tanımlamayı destekliyor yani onda bir sorun yok. Sanırım derleyici eleman sayısını parantez içindekilerden saymak yerine bizim yazmamızı istiyor. yani static int dizi[4] = {a,b,c,d}; olarak yazarsan kabul edebilir. Dökümandaki örneklerde böyle tanımlanmış.
 
Tabi ki hayır. CCS C yi en son 2013 yılında kullandım, sana da acilen bırakmanı tavsiye ederim.

Hatanın ne olduğunu bilmeden düzeltme şansım çok az ama CCS dökümanına baktığımda static tanımlamayı destekliyor yani onda bir sorun yok. Sanırım derleyici eleman sayısını parantez içindekilerden saymak yerine bizim yazmamızı istiyor. yani static int dizi[4] = {a,b,c,d}; olarak yazarsan kabul edebilir. Dökümandaki örneklerde böyle tanımlanmış.
teşekkür ederim ilginiz için ama, derleyici bu kısımda {a,b,c,d}; sayısal bir değer tanımlamamız gerektiğini söylüyor. hata bu yüzden sanırım. "a,b,c,d " sayısal bir değer olması gerekiyor. bunun önüne nasıl geçebiliriz acaba bi fikriniz var mı hocam?

Hata bu şekilde hocam:
" A numeric expression must appear here
Some C expression (like 123, A or B+C) must appear at this spot in the code. Some expression that will evaluate to a value. "
 
onlar zaten sayısal değerler. sen yazdıklarını paylaşır mısın lütfen?
 
onlar zaten sayısal değerler. sen yazdıklarını paylaşır mısın lütfen?
hiç bir değişiklik yapmadım hocam. sizin yazdığınızın aynısı. test etmek amaçlı derlemek istedim fonksiyonu ama derlemedi. buyurun;

int *dizi_olustur(int a, int b, int c ,int d){

static int dizi[4] = {a,b,c,d};
return dizi;
}
 
hayır burayı değil. Bu fonksiyonu nasıl çağırdın onu görmek istiyorum. Buranın çalışmama şansı yok.
 
hayır burayı değil. Bu fonksiyonu nasıl çağırdın onu görmek istiyorum. Buranın çalışmama şansı yok.
hocam fonksiyonu derleyemedim ki. hiç bir yerde kullanmadım yani. evet çalışması gerekiyor ama dediğim hatayı veriyor işte. bende anlamadım.
 

Forum istatistikleri

Konular
129,864
Mesajlar
930,851
Kullanıcılar
452,726
Son üye
ugur Göktürk

Yeni konular

Geri
Üst