如何在c中为指针赋一个整数?

Mar*_*pez 1 c null pointers function-pointers list

任务是创建一个功能

 int* pairSumSearch(int* data, int numEls, int pairSum)
Run Code Online (Sandbox Code Playgroud)

如果ints'数据',则在列表的第一个numEls内搜索,以找到与'pairSum'相加的两个相邻整数,并返回指向两个整数中第一个的位置的指针.如果没有两个int总和为pairum,那么该函数应该返回一个空指针.我认为我的所有代码都是正确的,除了指针部分.

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;
}
Run Code Online (Sandbox Code Playgroud)

测试用例是

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

但我只是得到了seg错误而应该返回

Found at position 8
Run Code Online (Sandbox Code Playgroud)

小智 6

我认为

*point = i-1;
Run Code Online (Sandbox Code Playgroud)

应该

point = &data[i-1];
Run Code Online (Sandbox Code Playgroud)

没有首发*.


klu*_*utt 6

你要问的答案是:

如何在c中为指针赋一个整数

很容易 你没有.指针包含一个地址.你永远不应该(好吧,有特殊情况,但你还没有)给指针分配一个整数.你问的是错误的问题,因为你不想这样做.

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

正如米格尔所解释的那样,*point = i-1完全是错的,应该是point = &data[i-1].看起来你正试图返回索引,但你应该返回一个指针.

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

在第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;
}
Run Code Online (Sandbox Code Playgroud)