ちょっと配列の中で最長のシーケンスをチェックするプログラムがあり、シーケンスがどのポイントから始まるかを教えてくれるプログラムがあります。 function.theポインタがNULLを指している以外の値を更新していないようですが、最初は を指していましたが、それでも変更はありませんでした。acの関数でポインタの値を渡す際の問題
答えて
もチェックする必要があります...あなたは、ポインタについて少しより良いものを理解するのに役立つかもしれwhic
for(int i=0;i<n-1;i++)
{
..
}
ひとつのアイデアは、それが普通の変数とは異なるものではありませんである(それは、その値としてアドレスを保持します)。
ここで、その値(begin
の値)を変更する必要があります。変更するには、その値を指す必要があります。
ので、あなたは、私はCでタイプしていた場合、私へのポインタのポインタ
func(..,&begin);
func(...,int** begin)
{
..
}
である始まるのアドレスを渡すには、それにcoderredoc *
とポインタがそうでcoderredoc **
可能となりますという名前になります。
開始の価値を変更したいのですが、どうすればよいですか?
あなたは、そのアドレスに何を割り当てる。..
int longestSequence(int a[], int n,int *elem){
int length=1,i,maxvalue=0,lastseen=a[0],mpos=0;
for(i=1;i<n;i++)
{
if(a[i-1]==a[i])
{
length++;
}
else
{
lastseen= a[i];
if(length>maxvalue)
{
maxvalue=length;
mpos = pos;
}
pos=i;
length=1;
}
if(length>maxvalue)
{
maxvalue=length;
mpos = pos;
}
}
*elem=mpos; //mpos position of the starting of the longest sequence
return maxvalue;
}
+---------+
| int |address:0x7777
| begin |
+---------+
/\
|
|
-----------+--------------------------- +
| pointer to begin (pbegin) | (int*)
| 0x7777 |
+----------------------------+
*begin=...
リターンの最大の長さと、我々は最大の要素が含まれます整数変数へのポインタを渡します。
メインであなたは:int legth=longestSequence(a,n,&longestSequenceElement);
あなたのコメントと上記のおかげで私は理解を助けましたこのトピックはより良い –
助けてくれて嬉しいです...ここでポインタを使う必要はありません。関数から整数を返します。 – coderredoc
@Pizzatags .:私の答えを確認してください – coderredoc
Cは値渡し(常に)を使用します。したがって、begin
を渡すと、それはbegin
の値になります。関数Aで関数を何回変更しても、関数Aを呼び出す関数の値は変更されません。
関数Aが関数Aと呼ばれる関数でbegin
の値を変更するようにするには、値begin
の代わりにbegin
へのポインターを渡します。
同様:
int longestSequence(int a[], int n, int** begin);
^^^
と値を変更する機能を使用
*begin = ....
で
longestSequence(a, n, &begin);
のようにそれを呼び出します。
の後に変更が表示され、が返されます。 forループ
ありがとうが、私は私の機能で**を使用することはできないと思われ、別の方法でそれを書かなければならないでしょう、 –
- 1. ポインタでスワップ関数を作成する際の問題
- 2. テンプレートクラスの関数ポインタを設定する際の問題
- 3. 関数内でオブジェクト変数を渡す際の問題VBA
- 4. 関数ポインタの問題
- 5. ゴー関数ポインタの問題
- 6. C#のCコールバック関数の問題点 - ポインタに値を渡す方法?
- 7. UIColorプリセット値を渡す際の問題
- 8. pthread_createで構造体ポインタを渡す際の問題
- 9. PHPのパラメータをJavaScript関数に渡す際の問題
- 10. 関数ポインタの問題:渡して宣言する
- 11. 文字列ポインタのネストされた関数に渡す問題
- 12. 関数を使って文字列を渡す際の問題
- 13. 関数ポインタの代わりに値(?)で関数を渡す?
- 14. テーブル値関数でCTEを使用する際の問題
- 15. のSolaris 64ビット関数ポインタの問題
- 16. Objective-Cの関数ポインタの問題
- 17. C++ポインタvoid関数の問題
- 18. Cで関数へのポインタを渡す
- 19. AjaxとjQueryの匿名関数からデータを渡す際の問題
- 20. Rスクリプトでggplotに引数を渡す際の問題
- 21. JavaFxでコントローラクラスに引数を渡す際の問題
- 22. オブジェクトをドメインメソッドに渡す際の問題
- 23. viewcontrollerにデータを渡す際の問題
- 24. のstrcpy関数へのポインタを渡す
- 25. Dateオブジェクトに値を渡す際の問題
- 26. state.goから値を渡す際の問題
- 27. 挫折構文メソッドに値を渡す際の問題
- 28. 関数内のポインタに関する問題
- 29. 関数呼び出しに関するポインタの問題
- 30. テキストボックスからjquery関数とコントローラ関数への値渡しの問題
あなたは値で 'begin'を渡しています。 'int longestSequence(int a、int n、int ** begin){' –
あなたはポインタをポインタに渡すためのポインタを渡す必要があります。例](http://stackoverflow.com/help/mcve)ですが、 '#include <...>'はありません。また、不完全な '{' braces'} 'のタイプミスがあります。 (ひどいコードの書式設定)。コメントのようにコードにフラグを立て、3スターのプログラマのように '*** begin = &a[i]; ***'と混同しない方がよいでしょう。 –
@JohnnyMopp iveがそれを試みたが、配列を入力した後にクラッシュした –