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