+ -
当前位置:首页 → 问答吧 → 对于指针的问题,参数的传入

对于指针的问题,参数的传入

时间:2011-12-21

来源:互联网

就是说我在排序的时候碰到了一个问题的,比如说我把需要排序的数放到数组s[]中,然后设置一个子程序void paixu(int s[]),然后在调用函数时paixu(s),这个是把数组的地址传进去了,然后排完序后数组也改变了,但是如果我不想让数组改变呢?要怎么办?
还有,如果我是用堆stack s,来装这个需要排序的数呢?设置的子函数void paixu(stack s),调用函数时paixu(s),这个排序完了后也是会改变堆的,我试过了,就是这样的!但是书上对堆的初始化时是initstack(stack & s),为什么取地址符呢?如果是传入s就已经是传入地址了,那为什么还要取地址符?

作者: yingzijuntuan   发布时间: 2011-12-21

第一个问题:把数组s[]复制到另一个数组,比方说数组s2[]。再paixu(s2)。

作者: regerfe   发布时间: 2011-12-21

第二个问题:initstack(stack & s),这是C++里的引用传递。

作者: regerfe   发布时间: 2011-12-21

不是呀。。我就是不想改变原始数据的。。。用了&不会改变原来的东西吗?我不想原来的stack s改变的。。。。

作者: yingzijuntuan   发布时间: 2011-12-22

引用 1 楼 regerfe 的回复:

第一个问题:把数组s[]复制到另一个数组,比方说数组s2[]。再paixu(s2)。

到时就用printf显示s2[]就可以,因为你用指针就是给地址;用指针改写内容那里面的东西一定是会变的。

作者: yjthdbg   发布时间: 2011-12-22

我知道会改变的呀。。。我想知道的是怎么才能不改变呢?能不能提供个方案的呀。。。。

作者: yingzijuntuan   发布时间: 2011-12-22

C/C++ code

#include <iostream>
using namespace std;
void BubbleSort(int b[],int a[],int n);
int main()
{
    int a[10]={9,8,7,6,5,4,3,2,1,0};
    int b[10];
    for (int i=0;i<10;i++)
    {
        cout<<a[i]<<" ";
    }
    cout<<endl;
    BubbleSort(b,a,10);
    for (int j=0;j<10;j++)
    {
        cout<<a[j]<<" ";
    }
    cout<<endl;
    for (j=0;j<10;j++)
    {
        cout<<b[j]<<" ";
    }
    cout<<endl;
    return 0;
}

//*********************冒泡排序*********************//
void BubbleSort(int b[],int a[],int n)//比较笨的方法,建两个数组
{
    for (int i=0;i<10;i++)
    {
        b[i]=a[i];
    }
    for (i=0;i<n;i++)
    {
        for (int j=0;j<n-i;j++)
        {
            if (b[j]>b[j+1])
            {
                b[j] ^= b[j+1] ^= b[j] ^= b[j+1];
            }
        }
    }
}

作者: shenxinji   发布时间: 2011-12-22

确实是个方法,但是有没有更好的方法呢?求大神解答呀。。。。

作者: yingzijuntuan   发布时间: 2011-12-22