2017-02-24 19 views
-1

私が行うには、Cプログラムを記述する必要があり、次の配列ポインタと関数は

  • 3つの引数を取る関数書く:配列の範囲の最初の 要素へのポインタ、ポインタへの の要素は配列内の範囲の終わりとint値です。関数 に、配列の各要素をint値に設定します。

私のコードは機能していません。ここまで私がこれまで持っていたことがあります。どんな助けもありがとうございます。

#include <stdio.h> 
#include <iostream> 

int listNumbers[3]{ 1,2,3 }; 
void Sorter(int *first, int * last, int *value); 
int * first = &listNumbers[0]; 
int * last = &listNumbers[2]; 
int value; 

int main() { 

    printf("your list numbers are:\n"); 
    int i; 
    for (int i = 0; i < 3; ++i) { 
     printf("%d", listNumbers[i]); 
    } 
    printf("\n"); 

    printf("enter an integer:\n"); 
    scanf_s("%d", &value); 

    Sorter(first, last, &value); 

    printf("your new list numbers are:\n"); 
    int j; 
    for (int j = 0; j < 3; ++j) { 
     printf("%d", listNumbers[j]); 
    } 
    printf("\n"); 

    system("PAUSE"); 
    return 0; 
} 
void Sorter(int *first, int * last, int *value) { 

    int i=0; 
    printf("value = %d\n", &value); 
    *first = value; 

    while (i <= *last) { 
     *(first + i) = value; 
     i++; 
    } 
} 
+0

タスクは、2つのポインタによって指定された*範囲*の各要素を設定することになっていますか?これは、あなたが実際に書いたものよりもフィットして、(全体の)配列の各要素を設定するようです。 –

+0

グローバル配列は、C++で無効に初期化されていることに注意してください。その他の3つのグローバル変数は不要です。できるだけグローバル変数を避けるべきです。時にはそれらは必要です。ここでは、そうではありません。配列さえも 'main()'の中で定義し初期化することができます。また、「選別者」という名前は、「セッター(Setter)」などのための悪化主義である。配列をソートするのではなく、その要素を単一の値に設定します。 (私はあなたが配列全体を設定すると、それはその後、ソートされていると思うが...) –

答えて

1

最初に、2つのポインタの間で異なる方法を試してください。

int count = last - first + 1; 

コンパイラは自動的に整数のサイズで除算します。範囲を含めるには1を追加します。今度は各要素を繰り返し処理してください:

for (int i = 0; i < count; i++) { 
    first[i] = value; 
} 

また、値をポインタとして渡すのはなぜですか?これは単なる値でなければなりません。

void Sorter(int *first, int *last, int value) { 

そして、あなたはそれを呼び出すとき...

Sorter(first, last, value); 
1

あなたSorter機能は、問題の基準を満たしていません。パラメータは配列への2つのポインタとし、intとします。あなたの関数は、代わりに3つのポインタを受け取ります。

それにもかかわらず、3番目の引数が塗りつぶし値を指している値を使用して、少なくともその演習の見かけの精神を実装することができましたが、そうしないでください。その代わりに、ポインタ自体を各配列要素に割り当てます。 そのは、少なくともあなたのコンパイラから警告を引き出すべきです。特に、あなたのコードがあなたが思うようなことをしていないときは、その警告を無視してはいけません。

さらに、lastポインタは、設定する最後の要素の直前を指すことが予想されますが、開始ポインタからの整数オフセットを指しているかのように使用します。これは、以前の問題とほぼ反対です。ここでは、ポインター値を指すintではなく、ポインター値自体を使用する必要があります。

関連する問題