2014-02-12 2 views
1

Это пример кода моей программы.Двойной указатель как массив для функции

У меня есть функция с именем function, которая используется для возврата целочисленного значения и целочисленного массива. Я должен передать их в качестве указателей (подпись function не может быть изменена). Поэтому я написал код ниже. Здесь я должен назначить значения двойному указателю, переданному функции.

void function(unsigned int* count, unsigned int ** array) 
{ 
    for(unsigned int i = 0; i<4;i++) 
    { 
    //array[i] = (unsigned int*)i*10; 
    } 
    *count = 4; 
} 

int main() 
{ 

    unsigned int count; 
    unsigned int array2[4]; 
    function(&count, (unsigned int**)&array2); 

    return 0; 
} 

Но вышеуказанный код не работает.

+3

Ваша программа не производит никакого наблюдаемого выхода. как он мог продемонстрировать вашу проблему? в какой-то момент вам нужно ** проверить ** его, чтобы увидеть, работает ли он. –

+0

Моей основной задачей было заполнить массив 'array2' в функции 'function' с указанными значениями. Я отлаживал код в VS, чтобы проверить, работает ли он правильно или нет. –

ответ

2

Повторное использование понятия Я полагаю, вы уже знаете, вы можете использовать указатель на первый элемент массива, а затем передать адрес указателя на функцию.

Таким образом, вы бы двойной указатель на беззнаковое Int, который является первым элементом массива:

void function(unsigned int* count, unsigned int ** array) 
{ 
    for(unsigned int i = 0; i<4;i++) 
    { 
    (*array)[i] = i*10; // WATCH OUT for the precedence! [] has higher precedence! 
    } 
    *count = 4; 
} 

int main(int argc, char* argv[]) 
{ 

    unsigned int count; 
    unsigned int array2[4]; 
    unsigned int *pointer_to_array = &array2[0]; 
    function(&count, (unsigned int**)&pointer_to_array); 

    return 0; 
} 

Как заметка на полях:

Если бы вы могли изменить подпись это имело бы смысл:

void function(unsigned int* count, unsigned int * array) 
{ 
    for(unsigned int i = 0; i<4;i++) 
    { 
    array[i] = i*10; 
    } 
    *count = 4; 
} 

int main(int argc, char* argv[]) 
{ 

    unsigned int count; 
    unsigned int array2[4]; 
    function(&count, array2); 

    return 0; 
} 

Причина, по которой это работает, потому что, когда вы передать массив в функцию (напрямую или с явным указателем на этот массив), она по существу становится указателем. Это называется массив, затухающий.

+2

Невозможно поменять подпись функции (см. Вопрос для деталей) - возможно, домашнее задание? –

+1

Спасибо, Пол, я пропустил это! –

+1

@ Paul: Ваш комментарий кажется смешным, в любом случае спасибо за поддержку –

0

Чтобы назначить массив, который передается указателем, сначала разыщите его, затем назначьте значение.

void function(unsigned int* count, unsigned int ** array) 
{ 
    for(unsigned int i = 0; i<4;i++) 
    { 
    (*array)[i] = i*10; 
    } 
    *count = 4; 
} 
1
void function(unsigned int* count, unsigned int ** array){ 
    for(unsigned int i = 0; i<4;i++){ 
     (*array)[i] = i*10; 
    } 
    *count = 4; 
} 

int main(){ 
    unsigned int count; 
    unsigned int array2[4]; 
    unsigned int *p = &array2[0]; 
    function(&count, &p); 
    return 0; 
} 
Смежные вопросы