2016-04-05 6 views
0

ポインタがの配列または単一のの整数を指しているかどうかを知りたい。私は、入力として2つのポインタ(INTチャー)を取り、ポインタがアレイ又は単一整数を指しているかどうかを伝える機能を有します。ポインタが配列または単一のintまたはcharを指しているかどうかを確認する方法

pointer=pointer+4; 
pointer1=pointer1+4; 

これは良い考えですか?

+1

これを実行するポータブルな方法はありません。 – Donnie

+0

@Donnieでも、それほど移植性のない方法ではありません。 – SergeyA

+2

OP:なぜそれが配列か単一の整数を指しているのかを知る必要がありますか?あなたは本当に解決しようとしている問題は何ですか? – PaulMcKenzie

答えて

1

これはお勧めできません。生のポインタだけを使用すると、配列または単一の値を指しているかどうかを知る方法がありません。

配列として使用されているポインタと単一の値へのポインタは同じです - 両方が単なるメモリアドレスなので、それらを区別するための情報はありません。最終的に何をしたいのかを投稿すると、配列と単一の値へのポインタを比較することに依存しないソリューションが存在する可能性があります。

+0

ポインタが「配列として使用されていません」。配列とポインタは別個のものです。 [comp.lang.c FAQ](http://www.c-faq.com/)のセクション6を参照してください。 –

+0

@KeithThompson、私はあなたの意見に同意します。ポインタは配列ではありませんが、ポインタは配列として使用できます。この答えに間違いはありません。 – SergeyA

+0

@SergeyA:「配列としてポインタを使用する」とはどういう意味ですか? –

1

他の人が言っているように、Cはポインタが何を指しているのか分からない。あなたはこの道を行くことを選択しなければならない場合は、あなたが...それが何であるかを示すために、配列内の整数または最初の位置にC++質問について

#define ARRAY_SENTINEL -1 

int x = 0; 
int x_array[3] = {ARRAY_SENTINEL, 7, 11}; 

pointer = &x_array[0]; 

if (*pointer == ARRAY_SENTINEL) 
{ 
    // do some crazy stuff 
} 

pointer = &x; 

if (*pointer != ARRAY_SENTINEL) 
{ 
    // do some more crazy stuff 
} 
+0

これは、ポインタが指し示す1つの 'int'オブジェクトが値' -1'を含むことを保証できない場合にのみ機能します。 (ちなみに、マクロはカッコで囲まれ、 'SENTINEL'のスペルが間違っています。) –

+0

また、私たちがC++でないことを忘れたかもしれません。 – NathanOliver

+0

0xDEADBEEF(またはそれに類するもの)は、-1よりもはるかに優れています。 – SergeyA

-1

をセンチネル値を入れることができ、答えは簡単です。 C++でCスタイルの動的配列を使用しないでください。 Cスタイルの動的配列が必要なときはいつでもstd::vectorを使うべきです。

この方法では、std::vectorだけが配列を保持するため、ポインタが何を指しているかは決して推測できません。

+0

ええええええええええええええええええええええええええええええええええええええええええええええええ、 – SergeyA

+0

私はその匿名のダウン票に同意します。動的に割り当てられた配列がより多く (やや)有効であるため、より使いやすいアプリケーションがあります。私が知る限り、 'std :: vector'は動的な作業に使用されます。つまり、予測不可能な方法で要素を追加したり削除したりしたい場所ですが、配列のサイズがわかっていて変わらないアルゴリズムを書く必要がある場合実行中は、 'std :: vector'は大過剰です。たとえば、[リンク](https://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm)。 – tomascapek

+0

しかし、私はdownvoteがあなたの解答に対する答えだと思う。 – tomascapek

0

実際、ポインタは整数または配列ではなく、メモリを指しています。整数が単一変数であるか、整数が配列の要素であるかを区別することはできません。どちらもメモリ内で全く同じに見えます。 いくつかのC++データ構造std :: vectorを使用できますか?

関連する問題