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

Đề tài: Cơ chế hoạt động của hàm con trỏ

  1. #1
    Ngày gia nhập
    10 2011
    Bài viết
    4

    Mặc định Cơ chế hoạt động của hàm con trỏ

    chào mọi người, mình là thành viên mới tham gia vào 4r, có gì mong mọi người chỉ bảo.
    Chương trình nhập trị cho mảng, sử dụng hàm con trỏ (viết bằng chương trình DEV-C++)
    C++ Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3.  
    4. int *nhap_tri(int *num)
    5. {
    6.     int a[10];
    7.     int i,n;
    8.     printf("Nhap kich thuoc mang: ");
    9.     scanf("%d",&n);
    10.     *num = n;
    11.     for (i=0;i<n;i++);
    12.     printf("Nhap tri %d phan tu cua mang: ",n);    
    13.         scanf("%d",&a[i]);
    14.     return a;
    15. }
    16. main()
    17. {
    18.       int *p, so_phan_tu,i;
    19.       p =  nhap_tri(&so_phan_tu);
    20.       for (i=0; i<so_phan_tu;i++);      
    21.       printf("Cac phan tu cua mang la: %d ",p[i]);  
    22.       getch();
    23. }
    Mình muốn hỏi là cơ chế hoạt động của hàm con trỏ ở chương trình trên (nếu có thêm tổng quát luôn thì càng tốt)
    Mong mọi người giúp đỡ giúp mình, thứ 2 này mình phải thuyết trình để thi giũa kỳ rồi.CẢm ơn mọi người nhìu
    Đã được chỉnh sửa lần cuối bởi beautifulsoul84hung : 27-10-2011 lúc 10:15 PM. Lý do: cho code vào tag

  2. #2
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

    Trích dẫn Nguyên bản được gửi bởi pen_abramovic Xem bài viết
    chào mọi người, mình là thành viên mới tham gia vào 4r, có gì mong mọi người chỉ bảo.
    Chương trình nhập trị cho mảng, sử dụng hàm con trỏ (viết bằng chương trình DEV-C++)
    #include<stdio.h>
    #include<conio.h>

    int *nhap_tri(int *num)
    {
    int a[10];
    int i,n;
    printf("Nhap kich thuoc mang: ");
    scanf("%d",&n);
    *num = n;
    for (i=0;i<n;i++);
    printf("Nhap tri %d phan tu cua mang: ",n);
    scanf("%d",&a[i]);
    return a;
    }
    main()
    {
    int *p, so_phan_tu,i;
    p = nhap_tri(&so_phan_tu);
    for (i=0; i<so_phan_tu;i++);
    printf("Cac phan tu cua mang la: %d ",p[i]);
    getch();
    }
    Mình muốn hỏi là cơ chế hoạt động của hàm con trỏ ở chương trình trên (nếu có thêm tổng quát luôn thì càng tốt)
    Mong mọi người giúp đỡ giúp mình, thứ 2 này mình phải thuyết trình để thi giũa kỳ rồi.CẢm ơn mọi người nhìu
    Hàm con trỏ thực chất cũng là một con trỏ bình thường thôi bạn à. Nếu như là hàm bình thường thì kiểu trả về là kiểu bình thường. còn nếu hàm con trỏ thì kiểu trả về là kiểu con trỏ.
    Ở trên bài của bạn. cái mà bạn muốn sau khi thông qua hàm
    int *nhap_tri(int *num)
    là một mảng do đó trong hàm bạn phải tạo một mảng. Và kiểu trả về là địa chỉ của phần tử đầu tiên của mảng. Nếu thay đổi một trong 2 (kiểu hàm, kiểu trả về) thì đương nhiên chương trình sẽ báo lỗi
    Hướng dẫn C++: https://www.youtube.com/watch?v=BwLodoQdoY4&list=PL1c9Uxlo-mplJDRGdONNupgo5OCBTyGGn

  3. #3
    Ngày gia nhập
    10 2011
    Bài viết
    4

    Cảm ơn bạn nhiều
    Bạn có thể nói cụ thể toàn bộ cơ chế hoạt động của hàm con trỏ trong VD đó được hok bạn

  4. #4
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

    Trích dẫn Nguyên bản được gửi bởi pen_abramovic Xem bài viết
    Cảm ơn bạn nhiều
    Bạn có thể nói cụ thể toàn bộ cơ chế hoạt động của hàm con trỏ trong VD đó được hok bạn
    C++ Code:
    1.  
    2. int *nhap_tri(int *num)
    3. {
    4.     int a[10]; // tạo một mảng, mảng bản chất là con trỏ
    5.     int i,n;
    6.     printf("Nhap kich thuoc mang: ");
    7.     scanf("%d",&n);
    8.     *num = n;
    9.     for (i=0;i<n;i++);
    10.     {
    11.         printf("Nhap tri %d phan tu cua mang: ",n);
    12.         scanf("%d",&a[i]);
    13.     }
    14.     // do bạn không truyền mảng vào hàm nên bạn không có cách nào lấy trực tiếp
    15.     // giá trị của mảng cả. Do đó bạn phải lấy một cách gián tiếp
    16.     return a;// a: bản chất là con trỏ trỏ tới phần tử đầu tiên của mảng.
    17.     // trong hàm main chỉ cần sử dụng int *p = nhap_tri (n) là bạn đã có một mảng
    18. }

    mình giải thích ở trong code nhé. và có sửa code cho bạn thêm { }
    Nếu không thì bài của bạn chỉ nhập đc một phần tử mà thôi

    ps: bài của bạn lần sau nhớ cho code vào tag nhé . Bài này mình cho vào hộ bạn rồi đấy
    Hướng dẫn C++: https://www.youtube.com/watch?v=BwLodoQdoY4&list=PL1c9Uxlo-mplJDRGdONNupgo5OCBTyGGn

  5. #5
    Ngày gia nhập
    10 2011
    Bài viết
    4

    cảm ơn bạn rất nhìu..... .Lần sau mình sẽ rút kn

  6. #6
    Ngày gia nhập
    10 2011
    Bài viết
    4

    Mặc định Cơ chế hoạt động của hàm con trỏ

    Code:
    #include<stdio.h>
    #include<conio.h>
    
    int *nhap_tri(int *num)
    {
    int a[10];
    int i,n;
    printf("Nhap kich thuoc mang: ");
    scanf("%d",&n);
    *num = n;
    for (i=0;i<n;i++);
    printf("Nhap tri %d phan tu cua mang: ",n);
    scanf("%d",&a[i]);
    return a;
    }
    main()
    {
    int *p, so_phan_tu,i;
    p = nhap_tri(&so_phan_tu);
    for (i=0; i<so_phan_tu;i++);
    printf("Cac phan tu cua mang la: %d ",p[i]);
    getch();
    }
    àh bạn, còn vấn đề nữa là hàm nhap_tri() còn trả về giá trị là số phần tử của mảng đã nhập trị, vậy nó đưa qua chương trình chính thông qua biến nào vậy bạn

  7. #7
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Trích dẫn Nguyên bản được gửi bởi pen_abramovic Xem bài viết
    Code:
    #include<stdio.h>
    #include<conio.h>
    
    int *nhap_tri(int *num)
    {
    int a[10];
    int i,n;
    printf("Nhap kich thuoc mang: ");
    scanf("%d",&n);
    *num = n;
    for (i=0;i<n;i++);
    printf("Nhap tri %d phan tu cua mang: ",n);
    scanf("%d",&a[i]);
    return a;
    }
    main()
    {
    int *p, so_phan_tu,i;
    p = nhap_tri(&so_phan_tu);
    for (i=0; i<so_phan_tu;i++);
    printf("Cac phan tu cua mang la: %d ",p[i]);
    getch();
    }
    àh bạn, còn vấn đề nữa là hàm nhap_tri() còn trả về giá trị là số phần tử của mảng đã nhập trị, vậy nó đưa qua chương trình chính thông qua biến nào vậy bạn
    trong câu

    p = nhap_tri(&so_phan_tu);

    biến được đưa về là so_phan_tu

    còn hàm thì trả về một con trỏ int cho biến p. Tuy nhiên p chẳng làm được gì cả và cái nó nhận được là biến nội của hàm. Nguyên mảng a[10] sẽ không còn được giữ sau khi thoát ra khỏi hàm.

    từ không còn được giữ có nghĩa là trị của chúng không được bảo đảm. May mắn thi còn đúng, không may thì sai bấy. Nếu bạn thấy chương trình vẫn in ra kết quả đúng là trường hợp may mắn.

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

  1. Làm sao tạo phần mềm bắt buộc có đĩa CD hoặc CD ảo mới chạy.
    Gửi bởi binhdt35 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 11-11-2012, 01:35 PM
  2. Tại sao chấm sổ text của sql 2008 không hoạt động?
    Gửi bởi thoigian15 trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 0
    Bài viết cuối: 10-10-2011, 04:00 PM
  3. Cơ chế hoạt động của chương trình Netcut là gì?
    Gửi bởi snake_programmer trong diễn đàn Thắc mắc chung
    Trả lời: 0
    Bài viết cuối: 18-01-2011, 09:44 PM
  4. [hỏi] chạy đồ hoạ trong c
    Gửi bởi newmember trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 11
    Bài viết cuối: 09-12-2008, 09:37 PM

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