簡體   English   中英

在ac函數中傳遞指針值的問題

[英]problems with passing pointer values in a c function

嘿,我有一個程序可以檢查數組中最長的序列,我需要它告訴我序列從哪一點開始,我在函數中使用了指針,但是似乎沒有在函數外部更新其值。指針指向NULL,但起初它指向a並且仍然沒有變化。

C使用值傳遞(始終)。 所以,當你通過begin它的價值begin傳遞。 無論您在函數A中更改了多少次, begin的值在代碼調用函數A中均保持不變。

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

喜歡:

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

並稱它為

longestSequence(a, n, &begin);

在功能上使用

*begin = ....

更改值。

函數返回 ,更改將可見。

for循環也需要檢查...

for(int i=0;i<n-1;i++)
{
..
}

一個想法可以幫助您更好地了解指針,因為它與普通變量沒什么不同(它以地址作為其值)。

現在,您需要更改該值( begin的值),因此需要指向該值。

所以你傳遞的開始地址是一個指針

func(..,&begin);
func(...,int** begin)
{
  .. 
}

如果我是C類型,則指向我的指針將命名為coderredoc * ,指向該指針的指針將為coderredoc ** ,依此類推。


因此,您想更改begin的值該怎么辦?

您將任何內容分配給該地址.. *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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM