Передача массива функции.Правильное использование указателей? - PullRequest
3 голосов
/ 24 января 2012

У меня проблема с массивом / указателем.Я создал массив 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];
  }
}

Ответы [ 4 ]

3 голосов
/ 24 января 2012

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

#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().

2 голосов
/ 24 января 2012

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

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

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 для вычисления (во время компиляции) количества элементов. Это лучше, чем повторять числа из определений переменных.

1 голос
/ 24 января 2012

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

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

или

void getSmth(int *anArray);  // pointer to first array element of type int
0 голосов
/ 24 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...