gpt4 book ai didi

c - 双指针使用错误

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

我在练习双指针时遇到了麻烦Xcode 中的错误是“EXE_BAD_ACCESS”

#include <stdio.h>

/* Program to Get Min and Max Value
in Array */

void SaveValue(int **maxPtr, int **minPtr, int arr[])
{
int i;
**maxPtr=arr[0]; // Error Line
**minPtr=arr[0]; // Error Line

for(i=1; i<5; i++)
{
if(arr[i]>**maxPtr)
**maxPtr=arr[i];
else if(arr[i]<**minPtr)
**minPtr=arr[i];
}
}

int main()
{
int arr[5]={4, 5, 7, 2, 6};
int *maxptr;
int *minptr;

SaveValue(&maxptr, &minptr, arr);

printf("%d, %d \n", *maxptr, *minptr);
}

我认为 **dptr = &ptr*dptr*ptr

**dptr表示*ptr指向的变量。

所以我假设 **dptr = arr[0] 意味着通过引用在 *ptr 指向的变量中保存第一个 arr !

但我现在遇到访问错误..我会感谢你的帮助!

最佳答案

void SaveValue(int **maxPtr, int **minPtr, int arr[]);提供指向 int 的指针所以就这样使用它们。

void SaveValue(int **maxPtr, int **minPtr, int arr[])
{
int i;
*maxPtr=arr + 0; /* same as *maxPtr = &arr[0]; */
*minPtr=arr + 0; /* same as *maxPtr = &arr[0]; */

for(i = 1; i < 5; i++)
{
if(arr[i] > **maxPtr)
*maxPtr = arr + i; /* same as *maxPtr = &arr[i]; */
else if(arr[i] < **minPtr)
*minPtr = arr + i; /* same as *minPtr = &arr[i]; */
}
}

这个接口(interface)也有点危险和不灵活;那么为什么不也传递数组的大小:

void SaveValue(int **maxPtr, int **minPtr, int arr[], ssize_t s)
{
*maxPtr=arr + 0;
*minPtr=arr + 0;

for(--s; s >= 0; --s)
{
if(arr[s] > **maxPtr)
{
*maxPtr = arr + s;
}
else if(arr[i] < **minPtr)
{
*minPtr = arr + s;
}
}
}

像这样调用函数:

  SaveValue(&maxptr, &minptr, arr, sizeof arr/sizeof *arr);

由于函数的返回值未被使用,我们可以利用它来应用一些错误指示,以允许函数的用户编写更稳定的代码:

int SaveValue(int ** maxPtr, int ** minPtr, int arr[], ssize_t s)
{
int result = 0;

if ((NULL == arr) || (NULL == maxPtr) || (NULL == minPtr) || (0 > s))
{
result = -1;
errno = EINVAL;
}
else
{
*maxPtr=arr + 0;
*minPtr=arr + 0;

for(--s; s >= 0; --s)
{
if(arr[s] > **maxPtr)
{
*maxPtr = arr + s;
}
else if(arr[i] < **minPtr)
{
*minPtr = arr + s;
}
}
}

return result;
}

像这样使用它:

#include <stdio.h>

int SaveValue(int ** maxPtr, int ** minPtr, int arr[], ssize_t s);

int main(void)
{
int arr[5]={4, 5, 7, 2, 6};
int *maxPtr;
int *minPtr;

int result = SaveValue(&maxPtr, &minPtr, arr, sizeof arr/sizeof *arr);

if (-1 == result)
{
perror("SaveValue() failed")
}
else
{
printf("%d, %d \n", *maxPtr, *minPtr);
}
}

关于c - 双指针使用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27890480/

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