Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 6 của 6

Chủ đề: Help Hàm Và Mảng

  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    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 [IMG]images/smilies/waiting.gif[/IMG] [IMG]images/smilies/waiting.gif[/IMG] [IMG]images/smilies/waiting.gif[/IMG]
    Còn chổ nhap(a,n); có khi nào nó hiểu a la a[0] không vậy [IMG]images/smilies/icon_question.gif[/IMG] [IMG]images/smilies/icon_question.gif[/IMG]
    AS SOON AS GOOD


    Mã:
    #include<stdio.h>
    #include<conio.h>
    void nhap(int a[],int n){
    for(int i=0;i<n;i++){
    	printf("
     Phan tu thu %d la ",i);scanf("%d",a[i]);
    }}
    
    
    void main(){clrscr();
    int a[20],n;
    printf("
     Nhap n ");scanf("%d",&n);
    nhap(a,n);
    for(int j=0;j<n;j++)
    printf("  %d ",a[j]);
    getch();}

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    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.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    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 tham gia
    Sep 2015
    Bài viết
    0
    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 :

    Mã:
    #include <iostream> struct myS{       int arrD[5];    int data;    myS():data(0){        for(int x = 0; x < 5; ++x)            arrD[x] = 0;    }}; void passbyVal(myS s){    for(int x = 0; x < 5; ++x){        s.arrD[x] = 10;    }} int main(){    myS a;    passbyVal(a);    for(int x = 0; x < 5; ++x)    {        std::cout << a.arrD[x] << " ";    }        return 0;}

    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 à [IMG]images/smilies/wink.png[/IMG]

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    - 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...

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Rất cám ơn bạn đã giải thích hộ mình

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •