2016-03-31 23 views
0

Bu işlev bir int kabul eder ve bu değerle 10 inçlik bir diziyi doldurur ve bu diziye bir işaretçi döndürür. Aynı şeyi nasıl yapabilirim, ancak bir diziye referans verebilirim?Sabit boyutlu bir diziye başvuru getiren bir işlev tanımlayabilir miyim?

int (*g(int n))[10] 
{ 
    int (*ptr)[10] = (int (*)[10])malloc(sizeof(int) * 10); 
    for (int i = 0; i < 10; i++) { 
     (*ptr)[i] = n; 
    } 
    return ptr; 
} 

şey

int (&h(int n))[10] 
{ 
    // How to do this 
    int (&ref)[10] = ???; 
    for (int i = 0; i < 10; i++) { 
     ref[i] = n; 
    } 
    return ref; 
} 
+0

Başvuru için başvuruda bulunmak istediğiniz bir diziye ihtiyacınız olacak ... – immibis

+0

std :: array yerine, daha temiz ve daha 'idiomatic' C++. –

cevap

0

aynı şekilde gibi ama bunun KQUEUE dönmeden önce:

int (&h(int n))[10] 
{ 
    return *g(n); 
} 

veya (daha az kısaca)

int (&h(int n))[10] 
{ 
    int (*ptr)[10] = (int (*)[10])malloc(sizeof(int) * 10); 
    for (int i = 0; i < 10; i++) { 
     (*ptr)[i] = n; 
    } 
    return *ptr; 
} 

veya daha fazla explicity

int (&h(int n))[10] 
{ 
    int (*ptr)[10] = (int (*)[10])malloc(sizeof(int) * 10); 
    for (int i = 0; i < 10; i++) { 
     (*ptr)[i] = n; 
    } 
    int& ref = *ptr; 
    return ref; 
} 
+0

int & ref = * ptr; Bu doğru değil gibi görünüyor. g ++ raporu hatası: ‘int *’ - ‘int’ arasındaki geçersiz dönüşüm [-fpermissive] int & ref = * ptr; –

İlgili konular