Giải thích ý nghĩa của & trong C++

Xem qua mấy clip của a đạt thì cái dấu & dùng để lấy ra địa chỉ của 1 biến

Nhưng mình có 1 đoạn code

typedef float dathuc[nmax];
void nhap(dathuc &K, int &x)
{
	int i;
	cout<<"Nhap bac cua da thuc: ";cin>>x;
	for(i=0;i<=x;i++)
	{
		cout<<"Bac "<<i<<" : "; cin>>K[i];
	}
}

thì chỗ này

dathuc &K, int &x

cái

&K &x

được hiểu như thế nào ạ

1 Like

Cái này là reference em à

1 Like

nghĩa là cái &K cũng là 1 cái tên nữa của K. &K có thể dùng để thay đổi giá trị của K. Thế nếu như e khai báo là

void nhap(dathuc K, int x)

thì nó có khác gì không a

1 Like

Khác rất nhiều, em không thể thay đổi giá trị của K và x. Vì cái được truyền vào hàm nhap khong phải là K và x, mà là giá trị của K và x.

Mọi hành vi trên giá trị của K và x không ảnh hưởng đến K và x.

Bài này anh chứng minh swap bằng reference

1 Like

chỗ này a nói rõ được không “khong phải là K và x, mà là giá trị của K và x.” theo như khai báo thì K là 1 mảng gồm nmax phần tử

1 Like

Xin lỗi em, anh đọc không kỹ. Nếu K là mảng, thì việc truyền K tương đương với truyền con trỏ. Mọi thay đổi trên con trỏ K sẽ thay đổi giá trị của mảng K.

#include <stdio.h>

void thaydoi(int x)
{
    x = 4;
}
int main()
{
    int a = 3;
    thaydoi(a);
}

Giá trị của a cuối cùng vẫn bằng 3. Vì cái được truyền vào hàm thaydoi không phải là a, mà là số 3.

Em xem bài này để hiểu

1 Like

toàn bộ cái bai đấy đây a. Đề bài là nhập vào các hệ số của 1 đa thức và in ra đa thức đó.
ví dụ 1 + 2x + 3x^2 (nhập lần lượt 1, 2, 3)
1 là bậc 0
2 là bậc 1
3 là bậc 2

#include<iostream>
#include<stdlib.h>
using namespace std;
#define nmax 100
typedef float dathuc[nmax];
dathuc P, Q;
int m,n;
void xuatmu(int i)
{
	if (i==1) cout<<"X";
	else if(i>1) cout<<"X^"<<i;
}
void xuat(dathuc &K,int &x)
{
	int i=0;
	while (K[i]==0&&i<=x) i++;
	cout<<K[i];xuatmu(i);
	while (++i<=x)
	{
		if (K[i]>0) {cout<<" + "<<K[i];xuatmu(i);}
		else if (K[i]<0) {cout<<" - "<<-K[i];xuatmu(i);}
	}
}
void nhap(dathuc &K, int &x)
{
	int i;
	cout<<"Nhap bac cua da thuc: ";cin>>x;
	for(i=0;i<=x;i++)
	{
		cout<<"Bac "<<i<<" : "; cin>>K[i];
	}
}
int main(){
	nhap(P,m);
	xuat(P,m);
}

ở cái chỗ

void nhap(dathuc &K, int &x)

nếu để như thế thì em sẽ in ra được đa thức là 1 + 2x + 3x^2
còn nếu để

void nhap(dathuc K, int x)

thì nó chỉ ra được số 1 thôi ạ nghĩa là nó chỉ in ra 1 bậc đầu tiên

1 Like

em hiểu rồi a ạ. cảm ơn a nhiều

1 Like

bạn lưu ý nếu để & trong 1 hàm bạn tạo ra ví dụ:

void hamTaoSuperMan( int array[], int &n )

khi giá trị của n thay đổi thì ta phải tham chiếu & vào! ở đây ta báo cho chương trình của ta biến n có thể thay đổi giá trị!

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