Я не говорю, что это лучшее решение или предпочтительное решение данной проблемы. Однако может быть полезно помнить, что функции могут возвращать структуры. Хотя функции не могут возвращать массивы, массивы могут быть обернуты в структуры, и функция может возвращать структуру, тем самым перенося массив с ней. Это работает для массивов с фиксированной длиной.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef
struct
{
char v[10];
} CHAR_ARRAY;
CHAR_ARRAY returnArray(CHAR_ARRAY array_in, int size)
{
CHAR_ARRAY returned;
/*
. . . methods to pull values from array, interpret them, and then create new array
*/
for (int i = 0; i < size; i++ )
returned.v[i] = array_in.v[i] + 1;
return returned; // Works!
}
int main(int argc, char * argv[])
{
CHAR_ARRAY array = {1,0,0,0,0,1,1};
char arrayCount = 7;
CHAR_ARRAY returnedArray = returnArray(array, arrayCount);
for (int i = 0; i < arrayCount; i++)
printf("%d, ", returnedArray.v[i]); //is this correctly formatted?
getchar();
return 0;
}
Я предлагаю комментарии о сильных и слабых сторонах этого метода. Я не удосужился это сделать.
Библиотека, в которую вы входите, была построена с помощью оптимизационных и отладочных символов (скорее всего, -g -O2
, который по умолчанию для сборников Linux).
Отладка оптимизированного кода несколько сложна, поскольку поток управления оптимизация заставляет код «прыгать», некоторые переменные становятся «<optimized out>
» и т. д.
Вы можете перестроить библиотеку с помощью CXXFLAGS = -g -O0
, или вы можете научиться отлаживать при оптимизации.
Последнее очень полезное умение, так как много раз ваша программа будет только сбой в оптимизированном режиме, и вам все равно придется отлаживать его в этом режиме.
resultiterator.cpp
на самом деле построена с помощью-O0
, а не-O2
. Если он является i> построен с-O0
, то вы не используете библиотеку, которую вы только что создали. – Employed Russian 9 November 2011 в 19:40