2015-06-16 2 views
0

У меня есть массив в верхней части кодаПолучить указатель массива из функции

int numberArray[] = {1, 2, 3, 4, 5}; 

И я хотел бы привести указатель из этого массива в другой указатель в функции

void movePointer(int* anotherPointer) 
    { 
     anotherPointer = numberArray; 
    } 

И теперь Я бы использовал anotherPointer в остальной части кода. Как я должен это делать? Я указала на указатель указателя, но я не получил ничего интересного.

+2

Вы должны прочитать о указателях и функциях в хорошей книге C. Это очень простой вопрос и подробно рассматривается в каждой книге о программировании на языке C. Хотя вопрос может иметь простой ответ, это не поможет вам. Кажется, есть XY-проблема, где вы хотите что-то сопровождать, но на самом деле задайте неправильный вопрос. Это, по-видимому, из-за отсутствия ваших знаний - без обид! – Olaf

+0

Обратите внимание, что вы не можете определить функцию в другой функции. Хотя некоторый компилятор (например, gcc) разрешает это как расширение, он нестандартен и не должен использоваться. – Olaf

+0

Да, я знаю! Но, может быть, я не могу понять, что я уже пытаюсь. – m0drzew

ответ

3
void movePointer(int ** anotherPointer) 
{ 
    *anotherPointer = numberArray; 
    int a = (*anotherPointer)[1]; // value 2 
} 
+0

Но я хотел бы использовать 'anotherPointer' вне функции' movePointer'. – m0drzew

+1

Демо-использование: 'int * my_ptr; movePointer (& my_ptr); int a = my_ptr [0]; '. – i486

+0

Да, это работает так, спасибо. – m0drzew

1

Помните, что anotherPointer является локальной переменной - доступно только в теле этой функции. Когда вы передаете переменную как указатель на функцию, в этой функции создается копия этого указателя. В этом коде:

void movePointer(int* anotherPointer) 
{ 
    anotherPointer = numberArray; 
} 

вы пытаетесь сделать изменения адреса, хранящегося в anotherPointer. И вы будете, но только в рамках этой функции. Вне этой функции адрес не был изменен. Лучшим решением является «указатель на указатель», как показано в его ответе как @ i486.

Смежные вопросы