2017-02-15 2 views
0

Недавно я столкнулся с проблемой использования адреса массива, когда мне нужно передать его как ссылку на другую функцию в C++. Например:C++ В чем разница между использованием массива и массивом?

void do_something(float * arr, int size) { 
    //Will do something about the arr 
} 

int main() { 
    float array[] = {1, 2, 3, 4}; 
    do_something(array, 4); // this will work well 
    do_something(&array, 4); // this will cause error 
    return 0; 
} 

Но когда я пытаюсь распечатать как массив и & массив, они одинаковы. Вы, ребята, знаете, в чем причина этого?

+0

Это потому, что тип '& array' является' float (*) [4] '. Если вы изучаете C++, изучите C++ и используйте стандартную библиотеку: 'std :: vector' является ответом здесь. – tadman

+0

Как я знаю, если вы передаете «массив», вы уже передаете адрес массива, и если вы передаете '& array', вы передаете адрес адреса массива –

ответ

1

Вот способ сделать это с std::vector:

#include <vector> 

void do_something(const std::vector<float>& arr) { 
    // Use arr for whatever. 
} 

int main() { 
    std::vector<float> arr = { 1, 2, 3, 4 }; 

    do_something(arr); 

    return 0; 
} 

Это инициализатор требует C++ 11 режима, который поддерживает большинство компиляторов, если этот флаг включен.