[英]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.