30/09/2018, 16:12

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

Đăng ký khóa học C++ cơ bản 2016 ( NEW ) tại đây : Thông tin về khóa học xem tại đây : -Sự khác biệt giữa 2 khóa học cũ và mới : +Khóa học C++ cơ bản 2016 là khóa học mới, được đầu tư nhiều hơn từ nội dung, phương pháp học, cách học hiệu quả. +Trong khóa học còn có nhiều kiến thức mới như thực hành trên HackerRank, thực hành trên Codefights và Đạt nghĩ mọi người nên học khóa học mới, bởi vì đây là kiến thức mới, phù hợp với hiện tại..... Mặt khác âm thanh cũng tốt hơn nhiều so với khóa học …

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 ạ

Nguyễn Minh Dũng viết 18:21 ngày 30/09/2018

Cái này là reference em à

Đăng ký khóa học C++ cơ bản 2016 ( NEW ) tại đây : Thông tin về khóa học xem tại đây : -Sự khác biệt giữa 2 khóa học cũ và mới : +Khóa học C++ cơ bản 2016 là khóa học mới, được đầu tư nhiều hơn từ nội dung, phương pháp học, cách học hiệu quả. +Trong khóa học còn có nhiều kiến thức mới như thực hành trên HackerRank, thực hành trên Codefights và Đạt nghĩ mọi người nên học khóa học mới, bởi vì đây là kiến thức mới, phù hợp với hiện tại..... Mặt khác âm thanh cũng tốt hơn nhiều so với khóa học …
Chỉnh Sửa viết 18:22 ngày 30/09/2018

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

Nguyễn Minh Dũng viết 18:19 ngày 30/09/2018

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

Đăng ký khóa học C++ cơ bản 2016 ( NEW ) tại đây : Thông tin về khóa học xem tại đây : -Sự khác biệt giữa 2 khóa học cũ và mới : +Khóa học C++ cơ bản 2016 là khóa học mới, được đầu tư nhiều hơn từ nội dung, phương pháp học, cách học hiệu quả. +Trong khóa học còn có nhiều kiến thức mới như thực hành trên HackerRank, thực hành trên Codefights và Đạt nghĩ mọi người nên học khóa học mới, bởi vì đây là kiến thức mới, phù hợp với hiện tại..... Mặt khác âm thanh cũng tốt hơn nhiều so với khóa học …

Chỉnh Sửa viết 18:12 ngày 30/09/2018

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ử

Nguyễn Minh Dũng viết 18:21 ngày 30/09/2018

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.

“khong phải là K và x, mà là giá trị của K và x”

#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

Đăng ký khóa học C++ cơ bản 2016 ( NEW ) tại đây : Thông tin về khóa học xem tại đây : -Sự khác biệt giữa 2 khóa học cũ và mới : +Khóa học C++ cơ bản 2016 là khóa học mới, được đầu tư nhiều hơn từ nội dung, phương pháp học, cách học hiệu quả. +Trong khóa học còn có nhiều kiến thức mới như thực hành trên HackerRank, thực hành trên Codefights và Đạt nghĩ mọi người nên học khóa học mới, bởi vì đây là kiến thức mới, phù hợp với hiện tại..... Mặt khác âm thanh cũng tốt hơn nhiều so với khóa học …
Chỉnh Sửa viết 18:28 ngày 30/09/2018

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

Chỉnh Sửa viết 18:24 ngày 30/09/2018

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

Thực tế khắc nghiệt viết 18:18 ngày 30/09/2018

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ị!

Bài liên quan
0