2012-01-24 4 views
3

У меня проблема с массивом/указателем. Я создал массив int myArray размера 3. Используя функцию, я хочу заполнить этот массив. Итак, я вызываю эту функцию, давая ей адрес &myArray массива. Правильно ли синтаксис для объявления функции?? Я передаю указатель на массив, поэтому функция может заполнить элементы массива один за другим. Но почему-то мой массив не заполнен правильными значениями. В Java я мог бы просто передать массив методу и вернуть массив. Любая помощь приветствуется! Благодаря!Передача массива на функцию. Правильное использование указателей?

#include <stdio.h> 

int myArray[3]; 

void getSmth(int *anArray[]); 

int main(void) 
{ 
    getSmth(&myArray); 

} 

void getSmth(int *anArray[]) 
{ 
    for(i=0...) 
    { 
    *anArray[i] = tmpVal[i]; 
    } 
} 

ответ

3

Удалить один уровень косвенности:

#include <stdio.h> 

int myArray[3]; 

void getSmth(int anArray[]); 

int main(void) 
{ 
    getSmth(myArray); 

} 

void getSmth(int anArray[]) 
{ 
    for(i=0...) 
    { 
    anArray[i] = tmpVal[i]; 
    } 
} 

Кроме того, как другие полагают, что это будет хорошая идея, чтобы передать размер массива в getSmth().

0

Вы должны использовать либо int anArray[] или int *anArray (что фактически то же самое, потому что массив распадается на указатель). Вы также должны убедиться, что функция знает, насколько большой ваш массив либо по соглашению, либо передан как параметр для него, не может использовать sizeof для этой цели.

2

Нет, недействителен синтаксис. У вас есть дополнительный *, который превращает аргумент в массив указателей.

В общем, лучше использовать:

void getSmth(int *array, size_t length); 

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

Вы бы тогда называть это так:

int main(void) 
{ 
    int a[12], b[53]; 

    getSmth(a, sizeof a/sizeof a[0]); 
    getSmth(b, sizeof b/sizeof b[0]); 
} 

Обратите внимание на использование sizeof вычислить (на этапе компиляции) число элементов. Это лучше, чем повторение чисел из определений переменных.

+0

Обратите внимание, что 'sizeof' трюк работает только на реальных массивах (' целочисленного массива [] '), а не на вещи, которые распадались на указатели ('int * array'). Это означает, что вы можете использовать sizeof для получения длины после построения массива, но затем вы должны передать длину в качестве дополнительного аргумента. – hugomg

1

Прямо сейчас, ваша функция принимает параметр int *anArray[], который представляет собой массив указателей для int. Удалите * и ненужный ваша функция подпись должна выглядеть просто так:

void getSmth(int anArray[]); // array of int 

или

void getSmth(int *anArray); // pointer to first array element of type int 
Смежные вопросы