我正在进行类分配(这就是为什么只显示相关代码)。我已经为一组随机数分配了一个指针数组,并且必须使用冒泡排序技术。
阵列设置如下:
int array[DATASIZE] = {71, 1899, 272, 1694, 1697, 296, 722, 12, 2726, 1899};
int *arrayPointers = array; // donation array
函数调用来自main,看起来如下:
bubbleSort(arrayPointers);
我必须在单独的函数中交换指针:
void pointerSwap( int *a , int *b)
{
// swap the pointers and store in a temp
int temp = *a; // temp storage of pointer a while being reassigned
*a = *b;
*b = temp;
}// end of pointerSwap
来自实际的冒泡排序:
void bubbleSort (int *toStore)
{
//sort each of the pointers successively
int i,j; // counters
for (i=DATASIZE-1;i>1;i--)
{
for (j=0;j<DATASIZE-1;j++)
{
if (toStore[j]>toStore[j+1])
{
pointerSwap(toStore[j],toStore[j+1]);
}// end of if?
}// end of j for loop
}// end of i for loop
}// end of buubleSort
我的问题是,当我尝试编译代码时,在调用指针交换时出现以下错误:
传递'pointerSwap'的参数1使得整数指针没有强制转换
注意:预期'int *'但参数类型为'int'
传递'pointerSwap'的参数2使得指针来自整数而没有强制转换
注意:预期'int *'但参数的类型为'int'
我不确定我做错了什么,我试过&#34;&amp; toStore [j]&#34;和&#34;&amp; toStore [j + 1]&#34;但是列表对原始数据进行排序,而不是指向数组(这是预期的)。
事先得到任何帮助,非常感谢 〜乔伊
答案 0 :(得分:1)
在电话中:
INotifyPropertyChanged
您正在将pointerSwap(toStore[j],toStore[j+1]);
(int
等同于toStore[j]
)传递给需要指针的函数。你需要传递一个指针,即:
*(toStore + j)
第二个问题与分拣不合适有关。您的功能签名不允许其他任何内容:
pointerSwap(toStore + j, toStore + j + 1);
您没有返回任何内容而且您没有提供对第二个阵列的引用,因此您无法做任何事情,只能排序到位。如果你真的需要一个单独的数组,你可以这样做:
void bubbleSort (int *toStore)
这将返回一个已排序的数组,并且不会触及原始数据。
答案 1 :(得分:0)
只是为了扩展先前的答案......
在C中,括号运算符[]相当于*(),所以
a[5]
相当于
*(a + 5)
两者都为指针添加偏移量以获取新指针,然后获取指向的值。当您传入toStore [j]到pointerSwap时,如果要传入指针,则传递toStore的第j个元素中的整数值,以便Store可以交换位置处的值。
你想要的是
(toStore + j)
而不是
*(toStore + j)
Fun C trivia:这些都是等效的表达式
toStore[j]
*(toStore + j)
*(j + toStore)
j[toStore]
练习:为什么C ++不适用?