Windows Việt

Cộng Đồng Công Nghệ Thông Tin Việt

Trang ChínhTrang Chính  Sự kiện  Tìm kiếmTìm kiếm  Đăng kýĐăng ký  Đăng NhậpĐăng Nhập  

Share
 
 help me
Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Tác giảThông điệp
The author of this message was banned from the forum - See the message
Tác giảThông điệp
Toend2008
Member

Toend2008
Member
Giới tính : Nam
Tuổi : 21
Posts Posts : 377
Coins Coins : 564
Thanked Thanked : 33
help me Empty
Bài gửiTiêu đề: Re: help me   help me EmptyFri 25 Dec 2009, 19:11

Thực sự ra mà nói, bạn phải nói cái khó ra thì mới giúp được.
Code:

#include<stdio.h>
#include<conio.h>

void Nhap(int a[],int &n)
{
   printf("Nhap n: ");
   scanf("%d",&n);
   for(int i = 0;i<n;i++)
   {
      printf("Nhap a[%d]: ",i);
      scanf("%d",&a[i]);
   }

}

void Xuat(int a[],int n)
{
   for(int i = 0;i<n;i++)
   {
      printf("%4d",a[i]);
   }
}

void HoanVi(int &a, int &b){
   int c = a;
      a = b;
      b = c;
}
void TangDan(int a[], int n){
   for(int i=0;i<n-1;i++){
      for(int j=n-1;j>i;j--){
         if(a[j]<a[j-1]){// 9 8
            HoanVi(a[j],a[j-1]);
         }
      }
   }
}
void GiamDan(int a[], int n){
   for(int i=0;i<n-1;i++){
      for(int j=n-1;j>i;j--){
         if(a[j]>a[j-1]){//  8 7
            HoanVi(a[j],a[j-1]);
         }
      }
   }
}
void SapXep(int a[], int n,void (*Fun)(int a[],int n)){
   (*Fun)(a,n);
   for(int i=0;i<n;i++){
      printf("%4d",a[i]);
   }
}

void main(){
   int a[100],n;
   Nhap(a,n);
   Xuat(a,n);
   printf("\n Tang Dan: \n");
   SapXep(a,n,TangDan);
   printf("\n Giam Dan: \n");
   SapXep(a,n,GiamDan);

}
Code:

1. Khái niệm:
Mặc dù một hàm không phải là một biến nhưng nó vẫn chiếm vị trí trong bộ nhớ và ta có thể gán vào vị trí của nó cho một loại biến con trỏ. Con trỏ này trỏ đến điểm xâm nhập vào hàm. Ta gọi đây là con trỏ hàm. Con trỏ hàm có thể sử dụng thay cho tên hàm và việc sử dụng con trỏ cho phép các hàm cũng được truyền như là tham số cho các hàm khác.
Để hiểu được các con trỏ hàm làm việc như thế nào, ta cần hiểu một chút về cách biên dịch và gọi một hàm. Khi biên dịch hàm, trình biên dịch chuyển chương trình nguồn sang dạng mã máy và thiết lập một điểm xâm nhập vào hàm (chính là vị trí chỉ thị mã máy đầu tiên của hàm). Khi có lời gọi thực hiện hàm, máy tính sẽ thực hiện một chỉ thị call chuyển điều khiển đến điểm xâm nhập này. Trong trường hợp gọi hàm bằng tên hàm thì điểm xâm nhập này là trị tức thời (gần như là một hằng và không chứa biến nào cả), cách gọi hàm này gọi là cách gọi hàm trực tiếp. Trái lại, khi gọi hàm gián tiếp thông qua một biến trỏ thì biến trỏ đó phải trỏ tới chỉ thị mã máy đầu tiên của hàm đó. Cách gọi hàm thông qua biến trỏ hàm gọi là cách gọi hàm gián tiếp.

2. Khai báo biến con trỏ hàm
[kiểu giá trị](*tên biến trỏ hàm)([danh sach tham so]);
Ý nghĩa của các thành phần trong khai báo con trỏ hàm giống như đối với khai báo hàm.
Một con trỏ hàm chỉ có thể nhận giá trị là tên của các hàm có cùng kiểu giá trị trả về và kiểu giá trị của các tham số.
ví dụ:
int f_ptr1( int ); chỉ có thể lấy giá trị của các hàm một tham số kiểu nguyên int và có giá trị trả về cũng là kiểu int
trong khi đó con trỏ hàm: void f_ptr2(int, flloat); thì có thể nhận giá trị là tên các hàm có kiểu giá trị trả về là void và có hai tham số, trong đó tham số thứ nhất có kiểu nguyênint còn tham số thứ hai kiểu thực float.

3. Các chú ý khi dùng hàm con trỏ:
- Các hàm có thể trở thành đối tượng được gọi trong hàm khác nên khai báo trước.
- Khi gọi một hàm bằng con trỏ hàm f cần phải có dấu ngoặc, hàm được gọi theo kiểu f (danh sách các tham số nếu có )
- Không có sự khác biệt nào giữa việc gọi bằng tên của hàm và gọi bằng con trỏ hàm.
---sưu tầm---


Câu 3 tự giải xem sao.


[You must be registered and logged in to see this link.]

※ Bài viết cùng chuyên mục


Tác giảThông điệp
Toend2008
Member

Toend2008
Member
Giới tính : Nam
Tuổi : 21
Posts Posts : 377
Coins Coins : 564
Thanked Thanked : 33
help me Empty
Bài gửiTiêu đề: Re: help me   help me EmptyFri 25 Dec 2009, 19:15

Mad Tài Sản Tui Có Cái Iphone.
Laughing Cảm ơn Admin.
monkey Yahoo!


[You must be registered and logged in to see this link.]

※ Bài viết cùng chuyên mục


Tác giảThông điệp
The author of this message was banned from the forum - See the message
Tác giảThông điệp
Toend2008
Member

Toend2008
Member
Giới tính : Nam
Tuổi : 21
Posts Posts : 377
Coins Coins : 564
Thanked Thanked : 33
help me Empty
Bài gửiTiêu đề: Re: help me   help me EmptySat 26 Dec 2009, 16:31

Con trỏ hàm ( con trỏ tới hàm ) dùng để lưu địa chỉ của của hàm. Nghe con trỏ là biết nó lưu địa chỉ rồi. Nhớ là kiểu hàm và kiểu con trỏ phải tương thích.
Vd: void (*DB)(int, int)
DB là con trỏ hàm kiểu void có 2 đối int và int
Con trỏ trỏ đến con trỏ được thì con trỏ hàm vẫn trỏ đến con trỏ hàm được, trỏ nhiều quá rớt lun. Very Happy


[You must be registered and logged in to see this link.]

※ Bài viết cùng chuyên mục


Tác giảThông điệp
comebabylove
Member

comebabylove
Member
Giới tính : Nam
Tuổi : 30
Posts Posts : 749
Coins Coins : 1736
Thanked Thanked : 25
help me Empty
Bài gửiTiêu đề: Re: help me   help me EmptyTue 29 Dec 2009, 15:48

sao cái này xuống hình ảnh T_T


help me Ngonhaih3763634__________________help me Penguin0co_______________help me Animal1ow2md0
BABY TẬP THỂ DỤC_______________GIANG HỒ NGUY HIỂM__________________SỰ TIẾN BỘ CỦA LOÀI VẬT

※ Bài viết cùng chuyên mục


Tác giảThông điệp
Sponsored content


help me Empty

※ Bài viết cùng chuyên mục


 
help me
Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
Windows Việt :: Lưu Trữ :: Lưu Trữ - Các môn học cũ :: Kỹ Thuật Lập Trình-
[Windows Việt] Deverloped by Nguyễn Gia Phú - https://windows.forumvi.com
Powered by © Forumotion.com - phpBB™ version ©phpBB2
Go to top Go to bottom