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)
没有首发*.
你要问的答案是:
如何在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)
| 归档时间: |
|
| 查看次数: |
904 次 |
| 最近记录: |