3

申し訳ありませんが、関連する多くの質問がすでに寄せられていることを知っているので、非常に簡単にします。

数年間のプログラミングにもかかわらず、関数内の配列 (または複数) のサイズを変更および変更するための正しい構文を見つけることができません。たとえば、配列内で定義されている "n" 個の数値のセットで配列を埋める関数が必要だとします。

int main(int argc, char *argv[]) {
    float *data = NULL
    int n = myfunction(data);
    for(i=0;i<n;i++) printf("%f\n",data[i]);
    free(data);
}

int myfunction(float *input) {
    int i,n=10;
    input = (float *) realloc( input, n*sizeof(float) );
    if(input!=NULL) {
        for(i=0;i<n;i++) input[i] = (float)i;
        return(n);
    else return(-1)
}

おそらくポインターへのポインターを使用する必要があるため、これが機能しないことはわかっていますが、関数の内部と外部で使用するポインター、ポインターからポインター、およびアドレス表記のどの組み合わせを使用するかを解決できません。

簡単な提案をいただければ幸いです。

4

2 に答える 2

0

古いポインターを に渡し、新しいポインターを返すのが最も簡単です(領域をインプレースで拡張myfunction()できれば、古いポインターと同じになる可能性があります)。realloc()

失敗する可能性があることに注意してくださいrealloc()。その場合、まだ割り当てられている古いメモリを失いたくないので、チェックせずに同じポインタを上書きするのは悪い考えです。

于 2013-04-23T13:05:41.587 に答える