2017-02-01 19 views
-1

int array[4]または*array[4]へのポインタを返すにはどうすればよいですか? 4つの整数を持つこの配列は、この関数のスコープ内でポインターとバブルソートによって昇順に計算され、次にメインに戻り、印刷されます。int配列[]またはint配列[]へのポインタを返す関数

この配列をこのfuctionの範囲で印刷できますが、main(呼び出し元関数)に戻すことができますか?

void sort4(int *n1, int *n2, int *n3, int *n4) int X[4] sort4(int *n1, int *n2, int *n3, int *n4)に変更すると動作しません。あなたは昇順で4つの個別の整数をソートしたい、とあなたはそれらのアドレスを渡すと、これはあまりにも

int *X[4] sort4(int *n1, int *n2, int *n3, int *n4) 
+1

私は理解したいと思っています。あなたは4つの整数のアドレスを渡し、それらの値を含む配列をソートしたいと思いますか?なぜアドレスを渡すのですか? – StoryTeller

+0

'* n1 <= * n2 <= * n3 <= * n4'となるように4つの整数をソートする方が簡単ではないでしょうか? – StoryTeller

+0

https://codeshare.io/5Pdd7X – Yellowfun

答えて

0

、あなたは指示先を交換することを確認する必要があります。ここで正しいポインタ演算で修正コードは次のとおり

#include <stdio.h> 

void sort4(int *n1, int *n2, int *n3, int *n4) 
{ 
    int *Arr[] = { n1, n2, n3, n4 }; 
    int **i = Arr, **j, temp; 
    int ** const arrayEnd = Arr + 4; 

    for (; i != arrayEnd - 1; i++) 
     for (j = i + 1; j != arrayEnd; j++) 
      if (**i > **j) { 
       temp = **i; 
       **i = **j; 
       **j = temp; 
      } 
} 

int main(void) 
{ 
    int i1 = 125; 
    int i2 = 100; 
    int i3 = 10; 
    int i4 = 50; 

    printf("i1 = %i, i2 = %i, i3 = %i, i4 = %i\n", i1, i2, i3, i4); 

    sort4(&i1, &i2, &i3, &i4); 

    printf("i1 = %i, i2 = %i, i3 = %i, i4 = %i\n", i1, i2, i3, i4); 

    return 0; 
} 

Output

は、I1 = 125、I2 = 100、I3 = 10、I4 = 50
I1 = 10、I2 = 50、 i3 = 100、i4 = 125

+0

ありがとうございました! Arr [4]全体をメインに戻したいのですか? void sort4関数はこの最後のコード行で終わります(return Arr;)。出来ますか? – Yellowfun

+0

sort4関数は無効ではなくなりました。intまたは配列Arrへのポインタを返します。 – Yellowfun

+1

@イエローファン - いいえ。最初の要素のアドレスに減衰します。そして、あなたは範囲から外れている何か、ぶら下がっているポインタにアドレスを返します。あなたは、呼び出しコードからいっぱいに配列を受け入れることができます。 – StoryTeller

関連する問題