gpt4 book ai didi

c - 使用指针对数组进行排序,不使用任何索引变量

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

我正在尝试使用指针对数组进行排序,也不使用索引变量

void sort(int *a,int n)
{
int *temp;
*temp=0;
int *b=a;
for(;a<a+n-1;a+=1)
{
for(b=a+1;b<b+n;b+=1)
{
if(*a>*b)
{
*temp=*a;
*a=*b;
*b=*temp;
}
}
}
}

不使用指针的上述程序的等价版本是

void sort(int a[],int n)
{
int i,j,temp;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
}

我在做一道练习题,刚开始自学指针。我相信我做对了,因为我也试图避免使用索引变量。我收到错误 segmentation fault : 11 。我在这里错过了什么?该程序是否有问题?还是想法本身就错了?感谢反馈。

最佳答案

这两行是错误的:

int *temp;
*temp=0;

在第一行中,您声明了一个指针变量。这个变量指向某处,但只要你不给这个变量赋值,你就无法知道它指向哪里。

然后,在第二行,你说:无论temp指向,将零写入该存储单元。所以程序写入一个随机的未知地址。

在你的例子中,temp根本不应该是指针,因为您稍后需要它来存储 int .

作为一般规则,您不应将参数更改为函数,在本例中为 a .相反,再创建一个局部变量。这将防止您比较 b<b+n 的代码中出现另一个错误。 .该表达式可以转换为 0<n对于除溢出之外的所有情况。表达式应该是 p<a+n , 其中p是您的新局部变量。

关于c - 使用指针对数组进行排序,不使用任何索引变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36775445/

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