2017-02-27 8 views
2

私はこの回文関数を使っていますが、配列の特定の場所を開始点として送信できるように修正しようとしています。このコードは、特定の要素のアドレスを取るように変更することができますどのように特定の配列要素のアドレスを関数に渡す

#include<iostream> 
using namespace std; 
bool pali(int [],int size); 
int main() 
{ 

    int n[] = {3, 5, 9, 4, 8, 2, 8, 4, 7, 10}; //just a sample array for testing 
    int length = 10; 
    pali(n,length); 
} 

bool pali(int a[],int size) 
{ 
    int flag=0; 
    int i=0; 
    while(flag==0 && i<size){ 
     if(a[i]==a[size-i-1]){ 
      flag=0; 
      i++; 
     } 

     else{ 
      flag=1; 
     } 
    } 
    if(flag==0) 
     return true; 
    else 
     return false; 
} 

: は、ここでは、コードです。したがって、配列アドレスの場所に例えば3というサイズで送ると、(4,8,2,8,4のように)trueを返します。しかし、それが回文ではない別のアドレスとサイズで送信された場合、それは偽を返します。

+0

あなたの関数にはすでに2つの引数がありますが、同じメソッドを使って2つ以上を追加するだけですか? –

+0

C++を使用している場合は、Cスタイルの配列と 'size'のペアの代わりに' std :: vector'を試してみてください。また、 'using namespace std'も避けてください。独自のコードとの衝突を避けるため、別々に保管することを意図しています。また、ブール値を返したい場合や 'bool flag = true'を返す場合、意味を逆転させてキャスティングを避けたい場合は' return flag == 0'または 'return!flag'を使うこともできます。 – tadman

+7

@the_martianちょうどpali(n + 3、5)と書いてください。 –

答えて

2

ポインタは、配列の任意の要素を指すことができます(互換性のあるポインタ型を想定しています)。配列の最初の要素を指すように、別の要素を指すこともできます。

ポインタ演算は、配列の要素のアドレスを計算するために使用できます。整数iをポインタに追加すると、最初に指し示されたオブジェクトのi番目の連続する兄弟へのポインタが返されます。配列の名前が最初の要素へのポインタへと減衰することを知り、配列nのインデックス3の要素のアドレスを式n + 3で計算することができます。

このように、関数に変更を加える必要はありません。すでに要素のアドレスに渡すことができます。

+0

素晴らしいです。 –

関連する問題