Thắc mắc về con trỏ và tham số

Làm thế nào để ngăn chặn sự thay đổi tham số hình thức trong chương trình con không ảnh hưởng đến tham số thực ở hàm main.
Trong bài code dưới mình muốn giá trị nó không thay đổi để sử dụng lại lần nữa theo chương trình con thứ 2(Insertion2)

#include <iostream>

using namespace std;

void Insertion1(int *a,int n){
    int t,j;
    for(int i=1;i<n;i++){
        j=i;
        while(j>0&&a[j-1]>a[j]){
            t=a[j-1];
            a[j-1]=a[j];
            a[j]=t;
            j--;
        }
    }
    cout<<"Mang sau khi sap xep theo phuong phap trao doi "<<endl;
    for(int i=0;i<n;i++){
        cout<<a[i]<<" ";
    }
}

void Insertion2(int *a, int n){

}

int main()
{
    int n;
    cout<<"Nhap so luong phan tu: "<<endl;
    cin>>n;
    while(n<=0){
        cout<<"\nNhap lai so luong phan tu: "<<endl;
        cin>>n;
    }
    int *a= new int[n];
    for(int i=0;i<n;i++){
        cout<<"Nhap phan tu thu "<<i+1<<" ";
        cin>>a[i];
    }
    cout<<"\nMang truoc khi sap xep "<<endl;
    for(int i=0;i<n;i++){
        cout<<a[i]<<" ";
    }
    cout<<"\n\n";
    Insertion1(a,n);
    Insertion2(a,n);
    return 0;
}

・Trong Insertion1 cấp phát một vùng nhớ kích thước n.
・Copy từ a vào vùng nhớ mới cấp phát.
・thao tác trên vùng nhớ mới.
・xóa vùng nhớ mới đi.

4 Likes

Thế thì cấp phát động trong bài này bất tiện quá, chẳng bằng cấp phát tĩnh, ko có tham chiếu thì thoải mái thay đổi tham số hình thức

Uhm, cậu cấp phát kiểu gì thì cậu vẫn thay đổi mảng mà :smile:
Cách clone mảng mà @Nguyen_Nhan_Tinh đưa ra là cách duy nhất, vì cậu đã sửa mảng mất rồi. Cậu có thể clone mảng trước mỗi hàm Insertion.

Hope it helps!

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?