0

私はC++配列の学習を固めておらず、これを適切に行う方法を忘れています。私は以前にchar配列でそれを行いましたが、int配列ではうまく機能しません。

新しい空白のint配列を宣言します。

int myIntArray[10];

それで、これは今のところ正しいヌルの配列であるはずですか?

次に、この配列にポインタを割り当てます。

int *pMyArray = myIntArray

うまくいけば、それはそこに正しいです。

次に、これを別のメソッドに渡します。

anotherMethod(pMyArray)

このポインタをローカル変数に割り当てたい場所(これは私が本当にわからない場所です):

anotherMethod(int *pMyArray){    
    int myLocalArray[];    
    myLocalArray[0] = *pMyArray;    
}

コンパイルエラーは発生していませんが、これがいくつかの面で正しいかどうかはわかりません。これでありがたいすべての助けとアドバイス。

編集:

私がやろうとしていることを言うべきだった。

非常に単純です。別のメソッドからローカル配列を変更したいと思います。

ので、私は持っています:

方法1には次のものが含まれます。

int myArray1 [10] = {0};

メソッド2には、myArrayへのポインターが渡されます。

次に、配列myArrayの変数を変更するためのコード。

4

4 に答える 4

1
int myIntArray[10];

それで、これは今のところ正しいヌルの配列であるはずですか?

いいえ、これは10ストレージ仕様に応じた値を含む整数の配列です。
ローカルで作成された場合、ランダムなガベージ値があります。
グローバルに作成された場合、PODに対してゼロで初期化された値が初期化されます。

それに加えて、メソッドは、渡した配列の最初の値をローカル配列に割り当てるだけです。
あなたは正確に何をしようとしていますか?私はわかりません。

于 2012-04-23T15:14:17.553 に答える
1
int myIntArray[10];

これは初期化されていない配列です。必ずしも0'sが含まれているとは限りません。

int *pMyArray = myIntArray

さて、pMyArrayの最初の要素を指しmyIntArrayます。

anotherMethod(int *pMyArray){    
    int myLocalArray[10];    
    myLocalArray[0] = *pMyArray;    
}

これはポインタを何にも割り当てません。ローカル配列の最初の値を、が指すに割り当てます。これはintpMyArray初期化されていないことを覚えておいてください。10C ++ではサイズが不明な配列を使用できないため、ここに追加しました。

ポイントを変更するpMyArrayには、参照によって渡す必要があります。

anotherMethod(int *& pMyArray)

また、自動ストレージの一部の値に割り当てると、関数の終了時にそのメモリが無効になるため、未定義の動作が発生します。

于 2012-04-23T15:14:36.473 に答える
1
int myIntArray[10];
So this should be an array of nulls for the moment correct?

正しくありません。初期化されていない10個のintの配列です。

int *pMyArray = myIntArray
Hopefully thats correct to there.

正確ではありませんが、pMyArrayは最初の要素myIntArray[0]へのポインターです。

このポインタをローカル変数に割り当てたい場所(これは私が本当にわからない場所です):

本当にポインタを割り当てる必要がある場合は、このコードを使用する必要があります

int *p_myLocalArray;    
p_myLocalArray = pMyArray; 
于 2012-04-23T15:17:57.177 に答える
1

ここにはいくつかの間違いがあります。

まず、初期化構文を使用して、ゼロの配列(nullではない)を実現します。

int myIntArray[10] = {0};

次に、int myLocalArray[];サイズは0です。たとえば、サイズが10の場合でも、書き込みmyLocalArray[0] = *pMyArray;を行うと、最初のintがからpMyArrayに割り当てられmLocalArrayます。これは意図したものではありません。

配列のポインタを割り当てたい場合は、次のようにします。

int *myLocalPointer;
myLocalPointer = pMyArray;

配列のローカルコピーが必要な場合は、ローカルにコピーする必要があります。そのためには、サイズと動的割り当ても必要です。

void anotherMethod(int *pMyArray, int size){    
    int *myLocalArray = (int *)malloc(size * sizeof(int));
    memcpy(myLocalArray, pMyArray, size * sizeof(int));

    ...
    free(myLocalArray);
}
于 2012-04-23T15:18:48.197 に答える