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

Đề tài: Không hiểu về &

  1. #1
    Ngày gia nhập
    03 2008
    Nơi ở
    Nhà tù
    Bài viết
    37

    Mặc định Không hiểu về &

    C Code:
    1. #include<conio.h>
    2. #include<stdio.h>
    3. #include<math.h>
    4. int GPTB2(float a,float b,float c,float& x1,float& x2) /*Chính hắn ,em muốn xử thằng này*/
    5.   {
    6.      float del;
    7.      int sn;     /*sn=so nghiem*/
    8.     if(a==0)
    9.       if(b==0)
    10.        {
    11.         if(c==0)
    12.            sn=3;
    13.         else
    14.         sn=0;
    15.          }
    16.        else
    17.         {
    18.           sn=1;x1=-c/b;
    19.          }
    20.       else
    21.         {
    22.         del=b*b-4*a*c;
    23.          if(del<0) sn=0;
    24.          else if(del==0)
    25.          {
    26.           sn=1;x1=-b/(2*a);
    27.           }
    28.           else
    29.           {
    30.         sn=2;
    31.         x1=(-b+sqrt(del))/(2*a); x2=(-b-sqrt(del))/(2*a);
    32.            }
    33.         }
    34.                 return sn;
    35.    }
    36. void main()
    37. {
    38.  float a,b,c,x1,x2,sn;
    39. clrscr();
    40. printf("nhap cac so a,b,c:");
    41. printf("\na="); scanf("%f",&a);
    42. printf("\nb="); scanf("%f",&b);
    43. printf("\nc="); scanf("%f",&c);
    44.  
    45. sn=GPTB2(a,b,c,x1,x2);
    46. if(sn==0)
    47. printf("phuong trinh vo nghiem");
    48. if(sn==3) printf("Phuong trinh co vo so  nghiem");
    49. if(sn==1) printf("Phuong trinh co 1 nghiem %f",x1);
    50. if(sn==2)
    51.  {
    52. printf("Phuong trình co 2 nghiem phan biet");
    53.           printf("x1=%f",x1);
    54.           printf("x2=%f",x2);
    55.   }
    56. getch();
    57. }

    Em không hiểu về cái &,tại sao có bài có,có bài lại không có.Các anh giải thích dùm em và khi nào dùng nó được không
    C Code:
    1. int GPTB2(float a,float b,float c,float& x1,float& x2) /
    Đã được chỉnh sửa lần cuối bởi kegiaumat055 : 15-04-2008 lúc 05:12 PM.

  2. #2
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    1.Đọc về khai báo và nhập biến tĩnh
    2.Đọc truyền tham số cho hàm ( tham trị, tham chiếu )
    3.Đọc về con trỏ và cấp phát động
    Ok, đến đây bạn đã hỉu chưa nào?
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

  3. #3
    Ngày gia nhập
    10 2007
    Nơi ở
    Gameloft studio
    Bài viết
    175

    & có ý nghĩa là địa chỉ.
    Giải thích đây:
    - Giả sử hàm của bạn không có &
    C Code:
    1. int GPTB2(float a,float b,float c,float x1,float x2){...};
    -> thì khi bạn gọi hàm thế này GPTB2(_a,_b,_c,_x1,_x2);
    Thì trong hàm của bạn sẽ xử lý dữ liệu của _x1 và _x2 truyền vào (giống như là copy giá trị của _x1 cho x1, _x2 cho x2. Những gì thay đổi với giá trị của x1,x2 trong hàm không ảnh hưởng đến hai biến _x1,_x2 (tức là ngoài hàm đó, _x1,_x2 vẫn giữ nguyên giá trị cũ)
    Nhưng nếu hàm bạn có &
    C Code:
    1. int GPTB2(float a,float b,float c,float& x1,float& x2){...};
    -> thì khi bạn gọi hàm giống như trên GPTB2(_a,_b,_c,_x1,_x2);
    Thì trong hàm của bạn sẽ xử lý dữ liệu của chính _x1 và _x2 (nhưng lại thông qua hai cái tên khác là x1,x2). Mọi thay đổi của x1,x2 đều làm thay đổi _x1,_x2.
    Bạn hiểu chứ.
    Không biết ghi gì luôn ...

  4. #4
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    &a sẽ trả về address của biến a.
    cái này giống tham biến trong pascal.
    Bạn phải xem phần hàm có sử dụng con trỏ là hiểu

    Tạm dịch :
    PHP Code:
    void ham(int *bien); 
    thì tương đương với

    PHP Code:
    void ham(&bien); 
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  5. #5
    Ngày gia nhập
    03 2008
    Nơi ở
    Nhà tù
    Bài viết
    37

    "Khi tham số hình thức của hàm là con trỏ thì tham số thực tương ứng phải là một địa chỉ của một biến hoặc tên của một biến mảng" Trích nhập môn lập trình ngôn ngữ C
    các anh có thẻ lấy cho em ví dụ về một địa chỉ của một biến và tên của một biến mảng không
    Đã được chỉnh sửa lần cuối bởi kegiaumat055 : 15-04-2008 lúc 06:44 PM.

  6. #6
    Ngày gia nhập
    10 2007
    Nơi ở
    Gameloft studio
    Bài viết
    175

    Mặc định Không hiểu về &

    Trích dẫn Nguyên bản được gửi bởi kegiaumat055 Xem bài viết
    Vậy mình thay & bằng * được không mấy anh
    Vẫn được.
    Ví dụ:
    C Code:
    1. #include<conio.h>
    2. #include<stdio.h>
    3. void hoanVi(int *a,int *b)
    4. {
    5.     int c=*a;
    6.     *a=*b;
    7.     *b=c;
    8. }
    9. void main()
    10. {
    11.     int c=3,d=4;
    12.     printf("c= %d \n d= %d",c,d);
    13.     hoanVi(&c,&d);//Chú ý chỗ gọi hàm này
    14.     printf("\nc= %d \n d= %d",c,d);
    15.     getch();
    16. }
    Để ý trong hàm cài đặt hoanVi và cách gọi hàm nha bạn.
    Không biết ghi gì luôn ...

  7. #7
    Ngày gia nhập
    03 2008
    Nơi ở
    Nhà tù
    Bài viết
    37

    C Code:
    1. hoanVi(&c,&d);
    Sao chỗ này lại có & hả anh

  8. #8
    Ngày gia nhập
    10 2007
    Nơi ở
    Gameloft studio
    Bài viết
    175

    Trích dẫn Nguyên bản được gửi bởi kegiaumat055 Xem bài viết
    C Code:
    1. hoanVi(&c,&d);
    Sao chỗ này lại có & hả anh
    Nếu không có thì chỉ là truyền cái giá trị thôi bạn, còn có nó mới nó có thể truyền cái địa chỉ của c,d.
    Mà hàm của ta thì đang cần truyền kiểu tham chiếu *. Nên phải thế
    Bạn nên xem lại truyền biến cho hàm, &, * nha.
    Không biết ghi gì luôn ...

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

    Cái mà bạn kegiaumat005 hỏi chính là tham chiếu.
    Ví dụ tôi có:
    C Code:
    1. int *iDemo;// o day ta khoi tao 1 con tro
    2. int x;
    Ta gán giá trị như thế này:
    C Code:
    1. x=5;
    2. iDemo = &x;/* o day ta truyen dia chi cua x cho iDemo,tuc la iDemo tham chieu toi x */
    Do iDemo tham chiếu tới x vì chứa địa chỉ của x nên nó tương đương với:
    C Code:
    1. *iDemo = x;// tuc la iDemo se = 5
    Vậy khi bạn viết hàm thì ta sẽ tham chiếu 1 biến trong hàm main qua các hàm khác để thực hiện tính toán.Điều đó tương đương với việc bạn viết là:
    C Code:
    1. #include<conio.h>
    2. #include<stdio.h>
    3. void hoanVi(int *a,int *b)
    4. {
    5.     int c=*a;
    6.     *a=*b;
    7.     *b=c;
    8. }
    9. void main()
    10. {
    11.     int c=3,d=4;
    12.     printf("c= %d \n d= %d",c,d);
    13.     hoanVi(&c,&d);// ly do tai sao dung &
    14.     printf("\nc= %d \n d= %d",c,d);
    15.     getch();
    16. }
    ttecak ?

  10. #10
    Ngày gia nhập
    04 2008
    Bài viết
    20

    Mình nghĩ trước khi hỏi bạn kegiaumat005 lên đọc qua các khải niệm cho thuộc đã, nếu bạn cứ hỏi kiểu này thì mình cam đoan là bạn cũng chưa hiểu ra cái gì đâu. Sau đó nếu làm bài tập có vấn đề thì mới hỏi .

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