2016-03-24 18 views
0

olarak değiştirmektir. Bu işlevi int i yerine bir işaretçi kullanarak değiştirmem gerekiyor ve sorunlarım var çünkü içgüdüm beni char işaretçisini kullanmamı ve işaretçiyi her seferinde artırmak için her seferinde sonraki dize ama bunu nasıl uygulayacağımı bilmiyorum. Ben tabii deneme oldumBulmacanın son parçası bu işlevi C

populate_demo() 

{ 
    int i; 
    for (i=0; evalue[i][0] ; i++) 
     env_add("DEMO",evalue[i]); 
} 

ben deneyin vermedi gibi değil ama ne ben burada gerek benim kod

olduğunu başarmak gibi olamaz:

Bu

Bugüne kadar ne var
int main() 
{ 
char array1[4][6]={"one","two","three","four"}; 
char *p; 
p=array1[0]; 
*p++; 
printf("%s",p); 
return 0; 
} 

Beklenen sonuç: printf "iki" yazdırır. ancak bunun yerine ilk dizenin sonraki karakterine gider ve \0'u bulana kadar yazdırır. Yani sorum benim sonraki dizeye nasıl gideceğim?

+0

Belki de –

+0

işaretçilerle ilgili bölümü yeniden okuyun Bir char * işaretçisiyse, bunu arttırma olasılığınız vardır. –

+3

@Justanewb Değerlendirmenin nasıl beyan edildiğini göster. –

cevap

3

bu

char array1[4][6]={"one","two","three","four"}; 

gibi bir dizi daha sonra Böylece örneğin yazabilirsiniz

char (*p)[6] = array1; 

gibi görünecek ilk elemana işaretçisi varsa

printf("%s", *p); 

veya

printf("%s", *++p); 

ya da Buradan

printf("%s", *p++); 

programı çıktı dizisi boş bir dize içermiyorsa o zaman programın yukarıda bakabilirsiniz

one 
two 
three 
four 

olduğunu

#include <stdio.h> 

#define N 6 

void populate_demo(char evalue[][N]) 
{ 
    for (; (*evalue)[0]; ++evalue) puts(*evalue); 
}  

int main(void) 
{ 
    char array1[][N] = { "one", "two", "three", "four", "" }; 

    populate_demo(array1); 

    return 0; 
} 

bir demonstrasyon programlarından biri takip eden yol,

#include <stdio.h> 

#define N 6 

void populate_demo(char evalue[][N], size_t n) 
{ 
    for (char (*p)[N] = evalue; p != evalue + n; ++p) puts(*p); 
}  

int main(void) 
{ 
    char array1[][N] = { "one", "two", "three", "four" }; 

    populate_demo(array1, sizeof(array1)/sizeof(*array1)); 

    return 0; 
} 

Program çıktısı aynı olacaktır.

Derleyici değişken boyut dizisini destekliyorsa, bunları işlev parametreleri olarak da kullanabilirsiniz.