cách truyền tham chiếu trong c như thế nào ?
Cách truyền tham chiếu trong c như thế nào?
Theo anh @ltd đồn thì C ko có khái niệm tham chiếu, nếu muốn thì chỉ truyền tham trỏ thôi (con trỏ)
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
// them vao phan tu trong mang dong
//khai bao thu vien prototype
void NhapMang();
void Xuatmang();
void Them();
void Xoa();
//ham con
void NhapMang(int *A,int n)
{
int i;
for(i=0;i<n;i++)
{
printf("\n Mang A[%d] = ",i);
scanf("%d",&A[i]);
}
}
void Xuatmang(int *A,int n)
{
int i;
for(i=0;i<n;i++)
{
printf(" %d ",A[i]);
}
}
// ham them phan tu
void Them(int *A,int &n,int VtriThem,int PhanTuThem)
{
int i;
realloc(A,(n+1)*sizeof(int *));//gia tang bo nho them 1 o
for(i=n;i>=VtriThem+1;i--)
{
A[i]=A[i-1];
}
A[VtriThem]=PhanTuThem;
n++;
}
//xoa phan tu
void Xoa(int *A,int &n,int VtriXoa,int PhanTuXoa)
{
int i;
for(i=VtriXoa;i<n-1;i++)
{
A[i]=A[i+1];
}
A[VtriXoa]=PhanTuXoa;
n--;
realloc(A,n*sizeof(int *));
}
//ham nhap mang
int main()
{ int n,*A=(int *)malloc(sizeof (int *));
do{
printf("\n ban nhap so nguyen n ");
scanf("%d",&n);
if(n<0)
{
printf("\n ban nhap sai.xin kiem tra lai ");
}
}while(n<0);
NhapMang(A,n);
Xuatmang(A,n);
int VtriThem,VtriXoa,PhanTuThem,PhanTuXoa;
// nhap vi tri them
do{
printf("\n ban hay nhap vi tri can them %d------>%d = ",0,n);
scanf("%d",&VtriThem);
if(VtriThem<0||VtriThem>n)
{
printf("\n ban nhap sai.xin kiem tra lai ");
}
}while(VtriThem<0||VtriThem>n);
//phan tu can them
printf("\n ban hay nhap phan tu can them %d------>%d",0,n);
scanf("%d",&PhanTuThem);
// ket qua
Them(A,n,VtriThem,PhanTuThem);
Xuatmang(A,n);
//nhap vitri can xoa
do{
printf("\n ban hay nhap vi tri can xoaa %d------>%d",0,n);
scanf("%d",&VtriXoa);
if(VtriXoa<0||VtriXoa>n)
printf("\n ban nhap sai.xin kiem tra lai ");
}while(VtriXoa<0||VtriXoa>n);
// nhap phan tu can xoa
printf("\n ban hay nhap phan tu can xoa %d------>%d",0,n);
scanf("%d",&PhanTuXoa);
// ket qua
Xoa(A,n,VtriXoa,PhanTuXoa);
Xuatmang(A,n);
free(A);
}
indent preformatted text by 4 spaces
?? Cái này là sao ? bạn bị lỗi á ?
k chạy dc .vì C k chạy .có tham chiếu &n\
void Them(int *A,int *n,int VtriThem,int PhanTuThem)
Them(A,&n,VtriThem,PhanTuThem);
Thử sửa lại như thế xem có được không? Lâu rồi không làm không nhớ rõ có đúng không.
Sửa lại như thế thì trong hàm Them, những chổ có n thay thành *n.
có vẻ chưa ổn cho lắm
vẫn k chạy được
Bạn không post lỗi lên mình cũng không biết bạn bị lỗi gì. Mình nhát lắm, ko bật IDE lên test đâu.
mình đã test và chạy được, thấy cũng ổn mà
mình dùng DevC++ 5.8.3, cơ mà mình thấy bạn hình như bạn dư cái này.
// nhap phan tu can xoa
printf("\n ban hay nhap phan tu can xoa %d------>%d",0,n);
scanf("%d",&PhanTuXoa);
nếu đã có vị trí cần xóa rồi thì đâu cần nhập phần tử cần xóa làm gì
cảm ơn bạn đã góp ý .devc cua minh k chay dc
Đặt đuôi file là cpp => C++ => biên dịch không lỗi.
oh hj cảm ơn người .k cần tham chiếu bài này vẫn đc mà
mark .c chạy chương trình của t à
#include<stdio.h>
#include<stdlib.h>
//#include<conio.h>
// them vao phan tu trong mang dong
//khai bao thu vien prototype
void NhapMang();
void Xuatmang();
void Them();
void Xoa();
//ham con
void NhapMang(int *A,int n)
{
int i;
for(i=0;i<n;i++)
{
printf("\n Mang A[%d] = ",i);
scanf("%d",&A[i]);
}
}
void Xuatmang(int *A,int n)
{
int i;
for(i=0;i<n;i++)
{
printf(" %d ",A[i]);
}
}
// ham them phan tu
void Them(int *A,int *n,int VtriThem,int PhanTuThem)
{
int i;
realloc(A,(*n+1)*sizeof(int *));//gia tang bo nho them 1 o
for(i=*n;i>=VtriThem+1;i--)
{
A[i]=A[i-1];
}
A[VtriThem]=PhanTuThem;
*(n)++;
}
//xoa phan tu
void Xoa(int *A,int *n,int VtriXoa,int PhanTuXoa)
{
int i;
for(i=VtriXoa;i<*n-1;i++)
{
A[i]=A[i+1];
}
A[VtriXoa]=PhanTuXoa;
*n--;
realloc(A,*n *sizeof(int *));
}
//ham nhap mang
int main()
{ int n,*A=(int *)malloc(sizeof (int *));
do{
printf("\n ban nhap so nguyen n ");
scanf("%d",&n);
if(n<0)
{
printf("\n ban nhap sai.xin kiem tra lai ");
}
}while(n<0);
NhapMang(A,n);
Xuatmang(A,n);
int VtriThem,VtriXoa,PhanTuThem,PhanTuXoa;
// nhap vi tri them
do{
printf("\n ban hay nhap vi tri can them %d------>%d = ",0,n);
scanf("%d",&VtriThem);
if(VtriThem<0||VtriThem>n)
{
printf("\n ban nhap sai.xin kiem tra lai ");
}
}while(VtriThem<0||VtriThem>n);
//phan tu can them
printf("\n ban hay nhap phan tu can them %d------>%d",0,n);
scanf("%d",&PhanTuThem);
// ket qua
Them(A,&n,VtriThem,PhanTuThem);
Xuatmang(A,n);
//nhap vitri can xoa
do{
printf("\n ban hay nhap vi tri can xoaa %d------>%d",0,n);
scanf("%d",&VtriXoa);
if(VtriXoa<0||VtriXoa>n)
printf("\n ban nhap sai.xin kiem tra lai ");
}while(VtriXoa<0||VtriXoa>n);
// nhap phan tu can xoa
printf("\n ban hay nhap phan tu can xoa %d------>%d",0,n);
scanf("%d",&PhanTuXoa);
// ket qua
Xoa(A,&n,VtriXoa,PhanTuXoa);
Xuatmang(A,n);
free(A);
}
Bạn xóa phần tử xong, realloc thì phần tử mất hết, lấy gì để in ra nữa?
void Xoa(int *A,int *n,int VtriXoa,int PhanTuXoa)
{
int i;
for(i=VtriXoa;i<*n-1;i++)
{
A[i]=A[i+1];
}
A[VtriXoa]=PhanTuXoa;
*n--;
realloc(A,*n *sizeof(int *));
}
oh thế hả .t tưởng chỉ xóa 1 phần tử thui