如何将整数分配给c中的指针?
How to assign a integer to a pointer in c?
任务是创建函数
int* pairSumSearch(int* data, int numEls, int pairSum)
在列表的第一个 numEls 内搜索 if ints 'data',以找到两个相邻的整数,总和为 'pairSum' 和 return 指向第一个位置的指针两个整数。如果没有两个总和为 pairsum 的整数,那么该函数应该 return 一个空指针。我想我的所有代码都正确,除了指针部分。
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");
}
}
但我只是在应该 return
的地方遇到段错误
Found at position 8
我觉得
*point = i-1;
应该是
point = &data[i-1];
没有首发*
.
您所问问题的答案:
How to assign a integer to a pointer in c
很简单。你不知道。指针包含地址。你永远不应该(好吧,有特殊情况,但你还没有)将一个整数分配给一个指针。你问错了问题,因为你不想那样做。
*point = i-1
的意思是把地址point
的内存值改成i-1
.
正如 Miguel 所解释的,*point = i-1
是完全错误的,应该是 point = &data[i-1]
。看起来你正在尝试 return 索引,但你应该 return 一个指针。
我想你应该找一个指针教程。网上有很多。
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;
}
您的代码中的错误在这一行:
*point = i-11;
您正在尝试在 point
指向的位置存储索引(数据)而不是地址(指针)。
问题是,您的 int *
变量 point
没有分配任何内存。或者换句话说,您的指针没有指向任何地方。
要么直接指向数组data
的索引。例如point = &(data[i-1])
,那么你就可以 return 对中前一个元素的地址,你的代码就可以正常工作了。
您遇到分段错误是因为您试图将 i-1
存储到没有内存(或内存不足)的位置。
虽然根据您的测试方法在语义上是错误的,但如果您想让该语句正常工作而不产生错误,您应该为 int *point
分配内存。例如int *point = (int *) malloc(sizeof(int));
.
任务是创建函数
int* pairSumSearch(int* data, int numEls, int pairSum)
在列表的第一个 numEls 内搜索 if ints 'data',以找到两个相邻的整数,总和为 'pairSum' 和 return 指向第一个位置的指针两个整数。如果没有两个总和为 pairsum 的整数,那么该函数应该 return 一个空指针。我想我的所有代码都正确,除了指针部分。
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");
}
}
但我只是在应该 return
的地方遇到段错误Found at position 8
我觉得
*point = i-1;
应该是
point = &data[i-1];
没有首发*
.
您所问问题的答案:
How to assign a integer to a pointer in c
很简单。你不知道。指针包含地址。你永远不应该(好吧,有特殊情况,但你还没有)将一个整数分配给一个指针。你问错了问题,因为你不想那样做。
*point = i-1
的意思是把地址point
的内存值改成i-1
.
正如 Miguel 所解释的,*point = i-1
是完全错误的,应该是 point = &data[i-1]
。看起来你正在尝试 return 索引,但你应该 return 一个指针。
我想你应该找一个指针教程。网上有很多。
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;
}
您的代码中的错误在这一行:
*point = i-11;
您正在尝试在 point
指向的位置存储索引(数据)而不是地址(指针)。
问题是,您的 int *
变量 point
没有分配任何内存。或者换句话说,您的指针没有指向任何地方。
要么直接指向数组data
的索引。例如point = &(data[i-1])
,那么你就可以 return 对中前一个元素的地址,你的代码就可以正常工作了。
您遇到分段错误是因为您试图将 i-1
存储到没有内存(或内存不足)的位置。
虽然根据您的测试方法在语义上是错误的,但如果您想让该语句正常工作而不产生错误,您应该为 int *point
分配内存。例如int *point = (int *) malloc(sizeof(int));
.