Ai giúp mình với,mình đang cần kiến thức này mà google mãi vẫn chưa ra
Cho mình hỏi cách gọi hàm từ 1 địa chỉ cụ thể :
ví dụ như
ví dụ trên để trỏ về 1 địa chỉ của biến.Mình có làm tương tự với con trỏ hàm nhưng không thể cho con trỏ hàm trỏ về địa chỉ của hàm được.Các bạn giúp mình 1 tay với.Có code mẫu thì hay quáCode:int anumber = 10; int *apointer; int *p; p = &anumber; apointer = &anumber; int c=(int)apointer; p=(int*)c; printf("%p %p",&anumber,p); // 2dia chi nay giong nhau
Ai giúp mình với,mình đang cần kiến thức này mà google mãi vẫn chưa ra
Kiểu thế này hả?
C Code:
#include <stdio.h> void Func(); int main() { void (*p)() = Func; p(); return 0; } void Func() { }
Freelancer, free coder, free tester.
Nhận hợp tác viết app, viết midlet khi free time.
Tình trạng: Siêu bận!
không phải rồi bạn ơi
Ví dụ bạn có hàm
C Code:
int sosanh(int a,int b) { .... return ...; } int main(){ //hàm sosanh sẽ có địa chỉ trên bộ nhớ như trên.giả sử nó có địa chỉ là 00210006 đi thì // làm sao ta cho con trỏ hàm trỏ về địa chỉ này rồi thực thi hàm,trả về kết quả là 1 số int // hoặc cách khác cũng được ... }
chưa nghe khái niệm địa chỉa của hàm bao giờ chỉ nghe thấy địa chỉ của biến . Nếu bạn muốn thực hiện hàm đó thì chỉ cẩn gọi nó thôi
exp:
C Code:
#include<stdio.h> int sosanh(int a,int b) { // Định nghĩa hàm } int main() { sosanh(3,4);// lời gọi hàm sao lại phải dùng con trỏ để gọi hàm :S }
Thế này thì sao?
C Code:
Freelancer, free coder, free tester.
Nhận hợp tác viết app, viết midlet khi free time.
Tình trạng: Siêu bận!
đọc bài này:
http://forums.congdongcviet.com/showthread.php?t=25204
@admin: công cụ tìm kiếm trên diễn đàn dở ẹc, đều phải dùng google.
Thank bạn DinhPhonh nhé.
Nhân tiện cho mình hỏi luôn
Mình có code như sau mà không hiểu sao nó không thực thi được :
Đầu tiên chạy đoạn code sau trước(trong file a.cpp) :
C Code:
#include "stdio.h" int test(int foo){ return foo; } int main(int argc,char* argv[]) { int (*apointer)(int); int (*p)(int); p = test; apointer = test; int c = ( int) apointer; p = (int(*)(int))c; // c là địa chỉ của hàm test return 0; }
khi chạy thì thu được địa chỉ chẳn hạn như là 20385957=> đây là địa chỉ của hàm test
Khi mình chạy tiếp đoạn code tiếp theo (trong file b.cpp):
C Code:
#include "stdio.h" int main(int argc,char* argv[]) { int (*p)(int); p = (int(*)(int))20385957;// la dia chi cua ham test khi bien dich file a.cpp nhu tren co duoc return 0; }
thì không chạy được.Nhưng gom vào 1 file thì chạy OK ??
Mình nghĩ là do mỗi ứng dụng chạy nó có mỗi phân vùng riêng cho nó,là các loại segment như code segment,data segment ... vậy có cách nào CALL hàm từ 1 ứng dụng được nạp vào bộ nhớ không các bạn ?
Đã được chỉnh sửa lần cuối bởi prefix : 31-07-2011 lúc 12:33 PM.
Vì tồn tại hàm test(int) thì khi chạy chương trình, máy mới cấp phát bộ nhớ chứ. Chứ hàm nó có ở trên bộ nhớ mãi đâu. Tắt chương trình a.exe thì máy giải phóng bộ nhớ cho đỡ lãng phí mà
Freelancer, free coder, free tester.
Nhận hợp tác viết app, viết midlet khi free time.
Tình trạng: Siêu bận!
Không,mình biên dịch ông a.cpp ra rồi mới chạy,khi đang chạy mình biên dịch tiếp b.cpp rồi chạy tiếp.nhưng b khi lấy địa chỉ hàm từ a.exe đang chạy thì vẫn không thực hiện hàm được.
Tuy nhiên nếu viết 2 code trên cùng 1 file c.cpp rồi biên dịch ra chạy thì hoàn toàn ok ?