2016-12-29 54 views
0

嘿,我有一個程序,在數組檢查最長的順序,我需要它來從沒有在序列開始什麼時候告訴我,我在函數中使用的指針爲,但它似乎沒有更新它的價值function.the指針指向NULL之外,但起初它指出了一個 ,仍然沒有改變。問題與交流功能傳遞指針值

+0

你傳入'按值begin'。你需要傳遞一個引用 - 在這種情況下是指針指針:'int longestSequence(int a [],int n,int ** begin){' –

+0

你發佈了*幾乎* * [最小,完整和可驗證例子](http://stackoverflow.com/help/mcve),但沒有'#include <...>',並且存在拼寫錯誤和不完整的'{'braces'}'。 (和可怕的代碼格式)。最好是像註釋一樣標記代碼,不要將它與'*** begin = &a[i]; ***'混淆,就好像你是一個三星程序員。 –

+0

@JohnnyMopp我嘗試過,並輸入數組後,它崩潰 –

回答

0

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);

+0

感謝您的評論和上面你幫我理解這個主題更好 –

+0

很高興它幫助...作爲暗示你不需要使用指針在這裏只是返回一個整數從函數... – coderredoc

+0

@Pizzatags .:檢查我的答案 – coderredoc

0

C使用由值(總是)通過。所以,當你通過begin它是你傳遞的begin值。不管你有多少次改變它的功能A內的begin值是在代碼中調用函數A.不變

如果你想功能的改變調用函數的函數的begin的值,必須通過一個指針begin而不是begin的值。

像:

int longestSequence(int a[], int n, int** begin);  
             ^^^ 

,並調用它像

longestSequence(a, n, &begin); 

在功能使用

*begin = .... 

更改值。

那麼變化會在函數返回可見

+0

謝謝,但它似乎我不能使用**在我的功能,將不得不寫在一個不同的方式, –