在c函数中传递指针值的问题

时间:2016-12-29 20:06:10

标签: c arrays pointers

嘿,我有一个程序可以检查数组中最长的序列,我需要它告诉我序列从什么时候开始,我在函数中使用了一个指针,但似乎没有更新它的值函数的指针。指针指向NULL,但最初它指向a 并且仍然没有改变。

2 个答案:

答案 0 :(得分:0)

C使用pass by value(总是)。因此,当您通过begin时,您传递的是begin的值。无论您在函数A中更改多少次,begin的值在代码调用函数A中都保持不变。

如果希望函数A在调用函数A的函数中更改begin的值,则必须将指针传递给begin而不是begin的值。

像:

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

并将其称为

longestSequence(a, n, &begin);

在功能使用中

*begin = ....

更改值。

然后,在函数返回后,会显示更改

答案 1 :(得分:0)

for循环也需要检查...

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

一个想法可以帮助你更好地理解指针,它与普通变量没有什么不同(它将地址作为其值)。

现在你需要改变这个值(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);