通过多个级别的调用传递c指针

时间:2017-02-24 22:19:30

标签: c arrays pointers bubble-sort

我正在进行类分配(这就是为什么只显示相关代码)。我已经为一组随机数分配了一个指针数组,并且必须使用冒泡排序技术。

阵列设置如下:

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;但是列表对原始数据进行排序,而不是指向数组(这是预期的)。

事先得到任何帮助,非常感谢 〜乔伊

2 个答案:

答案 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 ++不适用?