gpt4 book ai didi

c - 如何将整数分配给c中的指针?

转载 作者:太空宇宙 更新时间:2023-11-04 00:14:06 25 4
gpt4 key购买 nike

任务是创建一个函数

 int* pairSumSearch(int* data, int numEls, int pairSum)

如果整数为“data”,则在列表的第一个 numEls 中搜索,以找到两个相加为“pairSum”的相邻整数,并返回指向两个整数中第一个整数位置的指针。如果没有两个总和为 pairsum 的整数,那么该函数应该返回一个空指针。我想我的所有代码都正确,除了指针部分。

int* pairSumSearch(int* data, int numEls, int pairSum) 
{
int* point = NULL;
int checker = data[0];
for (int i = 1; i < numEls-1; i++) {
if (checker + data[i] == pairSum) {
*point = i-1;
break;
} else {
checker = data[i];
}
}
return point;
}

测试用例是

int main(void)
{
int data[] = {1, 2, 3, 4, 5, 6, 7, 10, 9, 10};
int* p = pairSumSearch(data, 10, 19);
if (p != NULL) {
printf("Found at position %zd\n", p - data);
}
else {
puts("Not found");
}
}

但我只是在应该返回的地方遇到段错误

Found at position 8

最佳答案

您所问问题的答案:

How to assign a integer to a pointer in c

很简单。你不知道。指针包含地址。你永远不应该(好吧,有特殊情况,但你还没有)将一个整数分配给一个指针。你问错了问题,因为你不想那样做。

*point = i-1的意思是将地址point的内存值改为i-1

正如 Miguel 所解释的,*point = i-1 是完全错误的,应该是 point = &data[i-1]。看起来您正在尝试返回索引,但您应该返回一个指针。

我想你应该找一个指针教程。网上有很多。

Found at position 8

不应该打印 Found at position 7 因为第一个索引是零。

不过你的代码有点乱。这样就干净多了。

int* pairSumSearch(int* data, int numEls, int pairSum)
{
for (int i = 0; i < numEls-1; i++) {
if (data[i] + data[i+1] == pairSum) {
return &data[i];
}
}
return NULL;
}

关于c - 如何将整数分配给c中的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52157870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com