01/10/2018, 16:08

Hỏi về con trỏ hàm?

Mình thử 1 chương trình cho ptr chỉ về con trỏ 1 hàm cộng:

#include <iostream>
using namespace std;

int add(int x, int y)
{
	return x + y;
}

int main()
{
	int(*ptr)(int, int) = add;
}

Mình chạy thử chương trình thì ptr không cùng giá trị với add, mình không hiểu tại sao???

Tao Không Ngu. viết 18:16 ngày 01/10/2018

Hi evai55.
Chuyển qua dùng std::function.

Vương Hoàng viết 18:20 ngày 01/10/2018

Cò 2 cách gián hàm cho con trò hàm:

  • tên con trỏ hàm = tên hàm
  • tên con trỏ hàm = & tên hàm.
明玉 viết 18:19 ngày 01/10/2018

Mình đã kiểm tra trên Visual Studio:

Thứ nhất:

int(*ptr)(int, int) = add;

int(*ptr)(int, int) = &add;

Không khác gì nhau cả, compiler tự động hiểu là mình muốn lấy con trỏ hàm.

Thứ hai:
Trong debug mode, compiler sẽ tạo thêm một hàm số trung gian (chắc để phục vụ debug gì đó) trước khi đến hàm số của bạn, theo code trên thì đại khái compiler nó làm thế này:

#include <iostream>
using namespace std;
int add(int x, int y)
{
	return x + y;
}
int inBetween_add(int x, int y) {
	return add(x, y);
}
int main()
{
	int(*ptr)(int, int) = inBetween_add;
}
rogp10 viết 18:19 ngày 01/10/2018

Name mangling có ảnh hưởng gì không nhỉ?

明玉 viết 18:17 ngày 01/10/2018

Name mangling không ảnh hưởng gì đến vấn đề này nhé.

Bài liên quan
0