繁体   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