2017-03-02 42 views
1

既存の配列から新しい配列に要素の範囲をコピーしたい。それは、IDで満たされたローカル整数配列を持ちます(乱数のみ)。また、ローカル配列と同じ数の要素を持つグローバルな空の配列もあります。私のプログラムには、ローカル配列のエントリの範囲をグローバル配列にコピーする関数が含まれています。この関数は次のようになります:配列からC言語の別の配列への要素のコピー範囲

void func(int *ptr, int first, int last); 

ptrポインタは、ローカル配列の開始アドレスとして使用されます。 最初には、コピーの開始位置を示します。 最後は、コピーがどこで終了するかを示します。 Btw、私はコードコンポーザーを使用してMSP430で作業しています。ここに私のコードは、

#include <msp430.h> 

int g_id[11]; 
int *ptr; 
int *p; 


int main(void) { 

    WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer 

    int id[11]={5,0,1,8,3,5,1,4,0,9,1}; 
    int first = 3; 
    int last= 8; 
    ptr = id; 
    p = g_id; 

    for(ptr=&id[first]; *ptr < &id[last]; ptr++) 
     { 
      *p = *ptr; 
      p++;   
     } 

    while(1); 
} 

グローバル配列ですが、私は把握できませんでした。

最後に動作せず、最初は3で、プログラムは3つの値にジャンプして8で始まります。 (8,3,5,1,4,0​​,9,1,0,0,0)でも見たい(0,0,0,8,3,5,1,4,0​​,0,0)

+0

私はどちらか、この行を追加したが、うまくいきませんでした: '* P = g_id [first]; ' – ccs

+0

' * ptr <&id [last] 'は型エラーです。 – melpomene

答えて

0

p = g_idを設定しています。コピーを一致する場所に移動するには、ローカルアレイとグローバルアレイの両方で一致するオフセットを設定する必要があります。それをよりよく理解するために

int *src, *dst; 

for (src = id + first, dst = g_id + first; src <= id + last; src++, dst++) { 
    *dst = *src; 
} 
+0

ありがとう、それはとてもうまくいく。 – ccs

0

、代わりにポインタのインデックスを使用します。

for (int i = first; i <= last; i++) { 
    g_id[i] = id[i]; 
} 

そうでない場合:

for (p = &g_id[first], ptr = &id[first]; ptr <= &id[last]; ptr++, p++) { 
    *p = *ptr; 
} 
+0

ありがとうございました。 – ccs

関連する問題