Lỗi khi dùng con trỏ trong hàm

Em mới học về c++ phần con trỏ ạ
Em đang gặp bài trả về con trỏ đã khai báo, cụ thể là số pi.
Em viết hàm bên ngoài hàm main không biết bị lỗi ở đâu ạ, giải đáp giúp em với ạ. Em cảm ơn.

code trong main nó trả về pi

#include<iostream>

using namespace std;

int main() {
	double pi=3.14159 ;
    double *p=&pi;
	cout << *p << endl;
	return 0;
}

code sau khi em viết hàm bên ngoài ạ nó lại in ra 1

#include<iostream>

using namespace std;

double* getToPi(){
    double pi=3.14159 ;
    double *p=&pi;
    return p;
}

int main() {
	cout << getToPi;
	return 0;
}

getToPi là 1 hàm, ở đây bạn đang gọi nó như là 1 biến.

4 Likes

em vừa sửa thành

cout << getToPi();

nó lại in ra địa chỉ ạ, chắc hàm getToPi của em bị sai nhưng không biết ở đâu ạ

Thì bạn trả về con trỏ mà :smiley:

4 Likes

à em hiểu r, bây h muốn trả về giá trị thì làm sao ạ, em sửa đi sửa lại toàn báo lỗi thôi ạ.
Giúp em với ạ, em cảm ơn

Con trỏ muốn lấy giá trị thì thêm * vào trước.

cout << *(getToPi());
4 Likes

đc r ạ, em cảm ơn ạ, có cách nào sửa trong hàm double luôn không ạ? Hay chỉ có mỗi cách đấy thôi ạ?

Bạn nên xem lại/hỏi lại yêu cầu :slight_smile: có thể sẽ ko xuất được trong hàm đó.

3 Likes

Trong lập trình cpp, mình thường truyền con trỏ vào, và thay đổi giá trị chứ không trả về con trỏ.

void getToPi(double*  pi){
    *pi=3.14159 ;
}

int main() {
    double pi = 0;
    getToPi(&pi);
    double b = 0;
    double* b_p;
    getToPi(b_p);
    cout << pi;
}

Để mình cho bạn vd:
Với cách của bạn:

double* getToPi(){
    double pi=3.14159 ;
    double *p=&pi;
    return p;
}

int main() {
    double* a = getToPi();
    double* b = getToPi();
    cout << "a = " << *a << endl;
    *b = 17;
    cout <<  "a = " <<*a << endl;
    return 0;
}

Kết quả là:

a = 3.14159
a = 17
// Kết quả này dựa trên môi trường test của mình
// tại https://www.onlinegdb.com/online_c++_compiler

như vậy bạn k thể tạo 2 con trỏ khác nhau bằng cùng 1 hàm.

3 Likes

em hiểu r, em cảm ơn ạ!

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