嘿,我有一個程序,在數組檢查最長的順序,我需要它來從沒有在序列開始什麼時候告訴我,我在函數中使用的指針爲,但它似乎沒有更新它的價值function.the指針指向NULL之外,但起初它指出了一個 ,仍然沒有改變。問題與交流功能傳遞指針值
回答
for循環也需要進行檢查......
for(int i=0;i<n-1;i++)
{
..
}
一個想法whic可以幫助你瞭解的東西有關指針好一點是它只不過是一個普通變量不同(其持有地址作爲其值)。
現在,這裏你需要的值(begin
的價值)來改變,所以你需要指針指向。
所以你傳遞開始是一個指針
func(..,&begin);
func(...,int** begin)
{
..
}
如果我在C類型,然後指向我將被命名爲coderredoc *
和指針,這將是coderredoc **
等的地址。
所以你想改變開始值你應該怎麼做?
你分配什麼該地址.. *begin=...
+---------+
| int |address:0x7777
| begin |
+---------+
/\
|
|
-----------+--------------------------- +
| pointer to begin (pbegin) | (int*)
| 0x7777 |
+----------------------------+
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 legth=longestSequence(a,n,&longestSequenceElement);
感謝您的評論和上面你幫我理解這個主題更好 –
很高興它幫助...作爲暗示你不需要使用指針在這裏只是返回一個整數從函數... – coderredoc
@Pizzatags .:檢查我的答案 – coderredoc
C使用由值(總是)通過。所以,當你通過begin
它是你傳遞的begin
值。不管你有多少次改變它的功能A內的begin
值是在代碼中調用函數A.不變
如果你想功能的改變調用函數的函數的begin
的值,必須通過一個指針begin
而不是begin
的值。
像:
int longestSequence(int a[], int n, int** begin);
^^^
,並調用它像
longestSequence(a, n, &begin);
在功能使用
*begin = ....
更改值。
那麼變化會在函數返回可見後。
謝謝,但它似乎我不能使用**在我的功能,將不得不寫在一個不同的方式, –
- 1. 宏功能指針問題
- 2. 功能指針問題:傳遞和聲明
- 3. 傳遞指針數組到功能
- 4. 傳遞指針在C中的功能
- 5. Ç - 傳遞一個指針的指針到另一個功能
- 6. 傳遞指針與數值圍棋
- 7. 傳遞常量指針參數與升壓::線程功能
- 8. 功能調用指針問題
- 9. 改變數組指針的值當傳遞到功能
- 10. 使用指針的交換功能有什麼問題?
- 11. 將值傳遞給指針
- 12. 使用指針傳遞值
- 13. 傳遞指針的值
- 14. 問題與指針
- 15. 功能指針功能指針
- 16. 星火流 - 問題與傳遞參數
- 17. Python傳遞指向德爾福功能的指針
- 18. 傳遞指針 - !?!對於寫入流
- 19. 功能和指針指針
- 20. Highcharts - 問題與圖表迴流功能
- 21. 功能指針
- 22. 功能指針
- 23. 指針功能
- 24. 功能指針
- 25. 功能指針
- 26. 指針功能
- 27. 爲什麼傳遞指針的指針作爲參數去功能
- 28. 將值指針傳遞給c函數中的指針值
- 29. 問題與指針在C
- 30. 問題與C指針
你傳入'按值begin'。你需要傳遞一個引用 - 在這種情況下是指針指針:'int longestSequence(int a [],int n,int ** begin){' –
你發佈了*幾乎* * [最小,完整和可驗證例子](http://stackoverflow.com/help/mcve),但沒有'#include <...>',並且存在拼寫錯誤和不完整的'{'braces'}'。 (和可怕的代碼格式)。最好是像註釋一樣標記代碼,不要將它與'*** begin = &a[i]; ***'混淆,就好像你是一個三星程序員。 –
@JohnnyMopp我嘗試過,並輸入數組後,它崩潰 –