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

Đề tài: Help Hàm Và Mảng

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

    Mặc định Help Hàm Và Mảng

    Theo em thì truyền trị của mảng vào hàm phải có dấu & (ở dòng void nhap(int a[],int n) ) đáng lẻ phải la void nhap(int &a[],int n) mới đúng
    Còn chổ nhap(a,n); có khi nào nó hiểu a la a[0] không vậy
    AS SOON AS GOOD


    Code:
    #include<stdio.h>
    #include<conio.h>
    void nhap(int a[],int n){
    for(int i=0;i<n;i++){
    	printf("\n Phan tu thu %d la ",i);scanf("%d",a[i]);
    }}
    
    
    void main(){clrscr();
    int a[20],n;
    printf("\n Nhap n ");scanf("%d",&n);
    nhap(a,n);
    for(int j=0;j<n;j++)
    printf("  %d ",a[j]);
    getch();}
    Đã được chỉnh sửa lần cuối bởi comeonbaby : 13-03-2008 lúc 09:04 PM.

  2. #2
    Ngày gia nhập
    03 2008
    Bài viết
    78

    Theo kiến thức hiện tại của mình thì mình có ý kiến sau:
    - Thực ra complier đều dịch chương trình ra kiểu con trỏ(biến động)khi chạy, mặc dù bạn làm theo biến tĩnh.
    - Mảng là một loại cấu trúc dữ liệu cơ bản nhất của một ngôn ngữ lập trình.
    - Như thế thì người ta có thể dùng con trỏ để biểu diễn một mảng (cấp phát động).Nhưng mà về nguyên tắc tôi chưa thấy con trỏ kiểu mảng như bạn bao giờ.Bởi vì mảng là mảng các kiểu (như int,float,char,pointer), mảng mà mỗi phần tử là con trỏ thì có.
    - Như thế thì về cách truyền tham biến thì Ta hay đặt toán tử lấy địa chỉ & trước biến đó...Như là &N đó.
    - Còn mảng thì chính cái tên của nó là con trỏ trỏ đến phần tử đầu tiên của mảng rồi.Mà là con trỏ rồi thì khỏi cần &.
    - Còn nhap(a,n) nó có hiểu là a[0] hay ko? thì theo tui là có.Bởi zì cái tên của mảng đóng vai trò như là một con trỏ trỏ đến phần tử đầu tiên của mảng như trên đã nói.
    Đã được chỉnh sửa lần cuối bởi hacker_mubaohiem : 13-03-2008 lúc 08:33 PM.
    No way, No success..

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

    Em cũng ko hiểu tại sao nhập mảng lại thêm &n làm gì ?
    ví dụ : int nhap (int A[100],int &n)
    nếu viết :int nhap (int A[100],int n) là sai vì sao ?
    mong anh giải thích hộ em

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

    hacker_mubaohiem nói khá đúng rùi đó. Tên mãng là con trỏ, cho nên chỉ có cách đóng gói nó vào class hay struct, union thì mới pass by value được còn bình thường truyền cỡ nào cũng chỉ là ref với pointer thui.
    Demo :
    C++ Code:
    1. #include <iostream>
    2.  
    3. struct myS{  
    4.     int arrD[5];
    5.     int data;
    6.     myS():data(0){
    7.         for(int x = 0; x < 5; ++x)
    8.             arrD[x] = 0;
    9.     }
    10. };
    11.  
    12. void passbyVal(myS s)
    13. {
    14.     for(int x = 0; x < 5; ++x){
    15.         s.arrD[x] = 10;
    16.     }
    17. }
    18.  
    19. int main()
    20. {
    21.     myS a;
    22.     passbyVal(a);
    23.     for(int x = 0; x < 5; ++x)
    24.     {
    25.         std::cout << a.arrD[x] << " ";
    26.     }
    27.    
    28.     return 0;
    29. }
    Còn chổ nhap(a,n); có khi nào nó hiểu a la a[0] không vậy
    Tên mãng là địa chỉ của nó, compiler sẽ đủ thông minh để nhận ra điều này cậu à

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

    - Bạn ko đặt câu hỏi tại sao chỉ là hàm Nhapmang(int A[],int &N); mới có &N...Còn các hàm khác thì ko?
    - Trong vấn đề truyền tham số thì có 2 loại tham số: tham biến và tham trị
    + Tham biến : giá trị của tham số được cập nhật khi ra khỏi pham vi của hàm
    + Tham trị : ngược lại tham biến thì nó ko đổi sau khi ra khỏi hàm.
    - Hàm nhập mảng trước đó ta chưa nhập, nên chưa biết số n bằng bao nhiêu?
    thì trong hàm đó ta nhập giá trị N vào thì sau khi ra khỏi hàm nhập mảng thì ta có N bằng giá trị ta vừa nhập. Có phải là trước khi gọi hàm nhapmang thì N ko xác định đúng hok?bi jờ nó đã có giá trị mới.Thì ta phải dùng kiểu tham biến (tức là &N).

    - Ngược lại, nếu bạn ko sử dụng tham biến(int &N) mà là tham trị (int N) thì trước khi nhập mảng N:ko xác định suy ra hàm thực thi xong thì nó lại trở thành ko xác định.Vì là tham trị mà.Nên N ko xác định thì Chương trình sai là đúng rồi.

    - Còn các hàm sau này bạn dùng tham trị (int N) vì N đã có giá trị xác định sau hàm nhapmang rồi.Nên ta có thể sử dụng nó.

    - Còn scanf("%d",&n); thì toán tử & là toán tử lấy địa chỉ của biến (chừng nào học con trỏ sẽ rỏ).Ý nghĩa câu này là truyền từ bàn phím một số nguyên vào địa chỉ của n.

    -Chúc bạn thành công...
    No way, No success..

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

    Mặc định Help Hàm Và Mảng

    Rất cám ơn bạn đã giải thích hộ mình

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