Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: Bàn Luận Về Truyền Tham Biến Cho Hàm (jacking_nguyen)

  1. #1
    Ngày gia nhập
    01 2008
    Bài viết
    18

    Mặc định Bàn Luận Về Truyền Tham Biến Cho Hàm (jacking_nguyen)

    xét bài toán :
    nhập 2 số a,b từ bàn phím và đổi thứ tự 2 số a và b đó VD như nhập a=5,b=7 sau đó xuất là a=7,b=5
    code

    #include<stdio.h>
    #include<conio.h>
    void doi(float*a,float*b){
    float c;
    c=*a;
    *a=*b;
    *b=c;
    }
    void main()
    {int d;
    do{/* su dung cau lenh do while de lam menu lua chon...*/
    float a,b;clrscr();
    printf("\nnhap a=");
    scanf("%f",&a);
    printf("\nnhap b=");
    scanf("%f",&b);
    doi(&a,&b);/* loi goi ham doi()*/
    printf("\nsau khi doi gia tri thi\n\n A=%6.2f B=%6.2f\n\n Bam y de tiep tuc",a,b);
    d=getch();}while(d=='y');printf("\n\n KET THUC ");getch();}
    giá trị của biến thay đổi sau khi hàm doi() thực hiện trên địa chỉ 2 biến a,b.cơ chế truyền cho hàm theo địa chỉ được gọi là phương pháp truyền tham biến cho hàm.nếu hàm được truyền tham biến thì nội dung của biến sẽ được thay đổi sau khi thực hiện hàm

    thảo luận về con trỏ,ta hiểu ngầm về các quy định như sau
    toán tử &(tên biến) : dùng để lấy địa chỉ của biến chính xác hơn là lấy địa chỉ ô nhớ dành cho biến
    toán tử *(tên biến) dùng để lấy nội dung của ô nhớ dành cho tên biến
    Đã được chỉnh sửa lần cuối bởi jacking_nguyen1 : 13-02-2008 lúc 09:22 AM.

  2. #2
    Ngày gia nhập
    08 2006
    Nơi ở
    TpHCM
    Bài viết
    202

    Cái trên là truyền con trỏ chứ tham biến cái gì
    Thế nếu
    void doi(float*&a,float*&b)
    thì gọi là gì bây giờ

  3. #3
    Ngày gia nhập
    01 2008
    Bài viết
    240

    Trích dẫn Nguyên bản được gửi bởi nguyentuan2 Xem bài viết
    Cái trên là truyền con trỏ chứ tham biến cái gì
    Thế nếu
    Code:
    void doi(float*&a,float*&b)

    thì gọi là gì bây giờ
    Code:
    void doi(float*&a,float*&b)
    Biến a ,b này là 1 bí danh của 1 biến trên heap.
    Ex
    Code:
    #include<conio.h>
    #include<stdio.h>
    void doi(int*&a,int*&b){
    int x;
    x=*a;
    *a=*b;
    *b=x;
    }
    void main()
    {
    	int b=3,a=2,*a1,*b1;
    	a1=&a;
    	b1=&b;
    	doi(a1,b1);
    	printf("%d,%d",a,b);
    	getch();
    }
    Time

  4. #4
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    void doi(float*&a,float*&b)
    Biến a ,b này là 1 bí danh của 1 biến trên heap.
    Chưa hiểu lắm chỗ này ? Làm sao có con trỏ tới tham chiếu ?

  5. #5
    Ngày gia nhập
    01 2008
    Bài viết
    240

    Trích dẫn Nguyên bản được gửi bởi nguyentuan2 Xem bài viết
    Cái trên là truyền con trỏ chứ tham biến cái gì
    Thế nếu
    void doi(float*&a,float*&b)
    thì gọi là gì bây giờ
    Trích dẫn Nguyên bản được gửi bởi rox_rook Xem bài viết
    Biến a ,b này là 1 bí danh của 1 biến trên heap.
    Chưa hiểu lắm chỗ này ? Làm sao có con trỏ tới tham chiếu ?
    Hãy thử nếu ta truyền vào 1 biến nào đó mà biến này không phải là kiểu con trỏ thì compiler luôn luôn báo lỗi nhưng nếu hàm doi() được thiết kế như sau
    Code:
    void doi(float&a,float&b)
    thì biến a,b lại bi danh của 1 biến nào đó trên Stack nhưng do ta có hàm
    Code:
    void doi(float*&a,float*&b)
    nên thực ra noi biến a,b bi danh đến 1 biến trên Heap thì đã bỏ qua 1 bước, cụ thể hơn là biến a,b bí danh của 1 biến con trỏ nào đó mà con trỏ này tham chiếu đến 1 biến nào đó trên Stack. Như thế có nghĩa là biến a,b là bí danh của 1 biến nào đó trên Heap
    Đã được chỉnh sửa lần cuối bởi nthung : 13-02-2008 lúc 11:31 AM.
    Time

  6. #6
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Mặc định Bàn Luận Về Truyền Tham Biến Cho Hàm (jacking_nguyen)

    nên thực ra noi biến a,b tham chiếu đến 1 biến trên Heap thì đã bỏ qua 1 bước, cụ thể hơn là biến a,b tham chiếu đến 1 con trỏ nào đó mad con trỏ này tham chiếu đến 1 biến nào đó
    Nói thế này mới chính xác T_T. Tham chiếu tới con trỏ chứ không có chuyện con trỏ tới tham chiếu. Sorry hiểu nhầm ý bạn nhé do nghe từ bí danh nên hiểu nhầm. Mà mình nghĩ cái này khỏi cần hàm làm gì, thử ra ngay 1 statement là thấy ngay :
    PHP Code:
    int *= &x;
    int *&*pr p//ok 
    PHP Code:
    int &x;
    int *&*rp = &x;//oops 

  7. #7
    Ngày gia nhập
    01 2008
    Bài viết
    18

    các bạn có đọc kĩ câu cuối của mình không đấy mình đã từng nói rằng cơ chế truyền cho hàm theo địa chỉ của biến được gọi là phương pháp truyền tham biến cho hàm còn gì

  8. #8
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    các bạn có đọc kĩ câu cuối của mình không đấy mình đã từng nói rằng cơ chế truyền cho hàm theo địa chỉ của biến được gọi là phương pháp truyền tham biến cho hàm còn gì
    Vậy thực chất mục đích của bài này là bàn luận về cái gì nhỉ ?

  9. #9
    Ngày gia nhập
    12 2007
    Bài viết
    224

    Trích dẫn Nguyên bản được gửi bởi rox_rook Xem bài viết
    Biến a ,b này là 1 bí danh của 1 biến trên heap.
    Chưa hiểu lắm chỗ này ? Làm sao có con trỏ tới tham chiếu ?
    Cái nằm trong Quote của anh R2 đơn giản lắm . Thế này , nếu ta khai báo

    Code:
    void func(int &a,int &b);
    Trong hàm main ta có

    Code:
    int c,d;
    func(c,d);
    ---> ta sẽ có a , b là 2 bí danh của c , d . Tức là a cũng chính là c và b cũng chính là d . Câu thần chú " Orion là Chocopie , Chocopie là Orion " . Ở đây a,b,c,d là kiểu dữ liệu nguyên bình thường .

    Thế thì viết thế này
    Code:
    int func(int *&p1 , int *&p2);
    Trong hàm main ta có

    Code:
    int *h1,*h2; //khai bao 2 con tro h1,h2 kieu nguyen
    func(h1,h2);
    ---> ta sẽ có p1 , p2 là 2 bí danh của h1 , h2 . Tức là p1 cũng chính là h1 và p2 cũng chính là h2 . Chẳng qua chỉ khác nhau ở chỗ đây là kiểu dữ liệu con trỏ thôi .

Các đề tài tương tự

  1. Phân biệt truyền biến bằng tham trị, tham chiếu, địa chỉ. Xin cảm ơn.
    Gửi bởi thaoha trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 18-02-2012, 02:03 PM
  2. Kỹ thuật C++ Truyền tham biến hay tham trị?
    Gửi bởi vietanh_90 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 18
    Bài viết cuối: 16-10-2011, 10:45 PM
  3. Thắc mắc về truyền tham biến và tham trị .. và còn nữa ^^
    Gửi bởi without_you trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 04-02-2010, 08:46 PM
  4. lỗi truyền tham biến trong cây nhị phân.
    Gửi bởi bills_khoa trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 19-04-2008, 09:40 AM
  5. phương pháp truyền tham biến cho hàm( jacking_nguyen)
    Gửi bởi jacking_nguyen1 trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 13-02-2008, 09:36 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn