30/09/2018, 16:56

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 ?

... viết 19:05 ngày 30/09/2018

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ỏ)

ngo viết 19:02 ngày 30/09/2018
#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
Trịnh Minh Cường viết 19:02 ngày 30/09/2018

?? Cái này là sao ? bạn bị lỗi á ?

ngo viết 19:07 ngày 30/09/2018

k chạy dc .vì C k chạy .có tham chiếu &n\

... viết 19:08 ngày 30/09/2018
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.

ngo viết 19:02 ngày 30/09/2018

có vẻ chưa ổn cho lắm
vẫn k chạy được

... viết 19:11 ngày 30/09/2018

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.

Trịnh Minh Cường viết 18:59 ngày 30/09/2018

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ì

ngo viết 19:08 ngày 30/09/2018

cảm ơn bạn đã góp ý .devc cua minh k chay dc

Trịnh Minh Cường viết 19:06 ngày 30/09/2018

làm luôn tấm scr shot

... viết 19:01 ngày 30/09/2018

Đặt đuôi file là cpp => C++ => biên dịch không lỗi.

ngo viết 18:58 ngày 30/09/2018

oh hj cảm ơn người .k cần tham chiếu bài này vẫn đc mà

ngo viết 19:09 ngày 30/09/2018

mark .c chạy chương trình của t à

... viết 19:00 ngày 30/09/2018
#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 *));
	
}
ngo viết 19:06 ngày 30/09/2018

oh thế hả .t tưởng chỉ xóa 1 phần tử thui

Bài liên quan
0