01/10/2018, 08:26
Cấp phát động cho mảng 1 chiều
#include <stdio.h>
#include <stdlib.h>
void nhapmang (int a[],int n);
void xuatmang (int a[],int n);
void xoa(int a[],int &n,int vt);
main()
{
int n,vt,x;
int *a;
do
{
printf("Nhap so phan tu n:");
scanf("%d",&n);
if(n<0)
printf("Nhap n >0
");
}while (n<0);
a=(int *)malloc(n*sizeof(int));
printf(" NhapMang
");
nhapmang(a,n);
printf(" XuatMang
");
xuatmang(a,n);
printf("
Nhap vt can xoa:");scanf("%d",&vt);
xoa(a,n,vt);
printf(" XuatMang
");
xuatmang(a,n);
printf("
%5d",a[4]);
free(a);
}
void nhapmang (int a[],int n)
{
for(int i=0;i<n;i++)
{
printf("a%d=",i);
scanf("%d",&a[i]);
}
}
void xuatmang (int a[],int n)
{
for(int i=0;i<n;i++)
printf("%5d",a[i]);
}
void xoa(int a[],int &n,int vt)
{
for(int i=vt;i<n-1;i++)
a[i]=a[i+1];
realloc(a, (n-1) * sizeof(int));
n--;
}
Hàm xóa phần tử mảng của mình , mặc dù đã realloc nhưng vẫn ko thế xóa vị trí của mảng
Bài liên quan
Khi bạn realloc lại 1 con trỏ hay 1 mảng thông qua hàm thì bạn phải tăng level của nó lên hoặc để tham chiếu cho nó, chứ chỉ để mỗi tham chiếu cho biến
n
thì đâu ăn nhằm gì.n
không phải là kích thước của mảng đâu nhé, nó chỉ là con số tượng trưng cho kích thước của mảng thôi, nên tăng/giảmn
không đồng nghĩa với việc kích thước của mảng sẽ tăng/giảm.Nhưng bạn đang code C thì không nên dùng tham chiếu, thay vào đó là dùng con trỏ:
Còn thuật toán dùng trong code bạn tự kiểm tra nhé.
Cái này khá nguy hiểm vì khi a là mảng tĩnh mà bạn realloc thì… vì viết như vậy người ta vẫn feed mảng tĩnh vào đc.
Cái này mình cấp phát mảng động mà cậu
Nó tạo ra một ràng buộc là phải dùng mảng động mới đúng, trong khi xóa (kiểu dời chỗ) đâu có cần