Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 17 kết quả

Đề tài: Truyền mảng cho hàm

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

    Mặc định Truyền mảng cho hàm

    Hiện giờ e đang tự học C theo tài liệu có sẵn( do ở chỗ e còn vùng sâu vùng xa wá :( ). Nhưg mà lúc e học tới vấn đề truyền mảng cho hàm thì e có 1 thắc mắc như vầy.
    Trong sách nói là vì tên mảng đc coi như là con trỏ nên khi truyền mảng cho hàm thì chính là truyền địa chỉ cho hàm.
    Như vậy thì có cách nào truyền giá trị của mảng cho hàm đc không? tại lúc mà e học pascal thì có thể truyền giá trị của mảng cho hàm đc.
    Nếu có thì mấy anh chỉ cho e với. Cảm ơn nhiều.

  2. #2
    Ngày gia nhập
    01 2009
    Nơi ở
    Hà Nội
    Bài viết
    205

    Theo mình đoán là truyền địa chỉ cho hàm, có nghĩa là giá trị trả về của 1 hàm sẽ là địa chỉ của 1 mảng, 1 xâu.
    VD:
    PHP Code:
    char *in_ra_xâu()
    {
          
    char *a="Xin chào các bạn";
          return 
    a;


  3. #3
    Ngày gia nhập
    01 2008
    Nơi ở
    UIT
    Bài viết
    129

    Trích dẫn Nguyên bản được gửi bởi trubavuong Xem bài viết
    Theo mình đoán là truyền địa chỉ cho hàm, có nghĩa là giá trị trả về của 1 hàm sẽ là địa chỉ của 1 mảng, 1 xâu.
    VD:
    PHP Code:
    char *in_ra_xâu()
    {
          
    char *a="Xin chào các bạn";
          return 
    a;

    Nên sửa thành

    PHP Code:
    const char *in_ra_xâu()
    {
          
    char *a="Xin chào các bạn";
          return 
    a;


  4. #4
    Ngày gia nhập
    01 2009
    Nơi ở
    Hà Nội
    Bài viết
    205

    Cho mình hỏi tý là có "nhất thiết " phải sửa như vậy không? Hàm của mình sai chăng? Hay là chúng có đặc điểm gì "rất" khác nhau về nội dung?

    Giải đáp hộ mình với vì mình còn ít kinh nghiệm cho nên mình không biết được tại sao nên sửa.

  5. #5
    Ngày gia nhập
    01 2008
    Nơi ở
    UIT
    Bài viết
    129

    Lý do an toàn thôi !
    Nếu bạn đảm bảo được ai đó hay chính bạn không vô tình chỉnh sửa cái chuỗi trả về từ hàm thì có không có const cũng chả sao nhưng nếu không chắc chắn thì nên có const.

  6. #6
    Ngày gia nhập
    01 2009
    Nơi ở
    Hà Nội
    Bài viết
    205

    Mặc định Truyền mảng cho hàm

    Nếu vậy thì nếu như mình thêm const vào và chỉnh sửa chuỗi thì chẳng lẽ cái giá trị trả về kia vẫn sẽ không thay đổi sao? Dù là constant hay không thì nó cũng chỉ là giá trị thôi chứ, nếu đã chỉnh sửa thì nó vẫn sẽ bị thay đổi mà.

  7. #7
    Ngày gia nhập
    01 2008
    Nơi ở
    UIT
    Bài viết
    129

    Chuỗi "Xin chào các bạn" trong hàm của bạn là 1 hằng chuỗi, nếu vô tình chỉnh sửa thì chương trình vẫn dịch bình thường nhưng khi chạy sẽ crash bất đắc kì tử (với các môi trường 16bit thì tớ không biết ). Debug sẽ ra lỗi "access violation".
    Việc thêm const sẽ quy định con trỏ trả ra từ hàm là con trỏ tới hằng nên nếu có bất kì sửa đổi nào compiler sẽ bắt lỗi lúc dịch

  8. #8
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Hiện giờ e đang tự học C theo tài liệu có sẵn( do ở chỗ e còn vùng sâu vùng xa wá :( ). Nhưg mà lúc e học tới vấn đề truyền mảng cho hàm thì e có 1 thắc mắc như vầy.
    Trong sách nói là vì tên mảng đc coi như là con trỏ nên khi truyền mảng cho hàm thì chính là truyền địa chỉ cho hàm.
    Như vậy thì có cách nào truyền giá trị của mảng cho hàm đc không? tại lúc mà e học pascal thì có thể truyền giá trị của mảng cho hàm đc.
    Nếu có thì mấy anh chỉ cho e với. Cảm ơn nhiều.
    Thứ nhất là bạn lên được mạng, vậy là cả thế giới ở đó rồi

    Mảng là con trỏ hằng, thầy bạn nói vậy là đúng, các thao tác sử lý dữ liệu là dựa trên địa chỉ. C hay pascal cũng vậy, bạn không cần phải băn khoăn là làm thế nào để truyền giá trị cho mảng đc.

    Vì bạn hiểu nó là truyền giá trị của mảng cho hằng như Pascal thì nó là như vậy, còn về bản chất thì như thầy bạn nói.

  9. #9
    Ngày gia nhập
    11 2007
    Nơi ở
    Hà Nội
    Bài viết
    520

    lưu ý thêm với chủ thread : nếu truyền mảng 2 chiều thì phải dùng toán tử ép kiểu

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

    @ Trubavuong: Không pải là trả về địa chỉ đâu :
    Mấy a có thể chỉ rõ thêm đc không. E tự học nên k có thày dạy, đại để cái e hỏi nó như thế này.Xét ví dụ.
    PHP Code:
    #include <iostream>

    void test(int a[2]);
    {
         
    a[1]=2;
    }

    int main()
    {
         
    int a[2]={1,1};
         
    int i,p;
         for(
    i=0,p=0;i<2;i++)
              
    p+=a[i];
         
    printf("\n%d",p);
         
    test(a);
         for(
    i=0,p=0;i<2;i++)
              
    p+=a[i];
         
    printf("\n%d",p);
         return 
    0;

    Nếu như theo ví dụ trên thì kết quả dòng đầu ra là 2 dòng 2 ra là 3.
    Ý của e là có cách nào truyền mảng cho hàm mà không làm thay đổi giá trị của các phần tử trong mảng sau khi thực thi cái hàm đó hay không. Tức là truyền giá trị của mảng cho hàm đấy. Nếu đc như thế thì kết quả ra là 2 2.
    Nếu có mấy a chỉ cho e kĩ thuật đó với. Nếu có ví dụ thì càng tốt, e cảm ơn.


    cho code vào thẻ code nha cảm ơn bạn - langman
    Đã được chỉnh sửa lần cuối bởi langman : 08-03-2009 lúc 10:03 PM.

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

  1. thugian5s.com :: Truyện cười, ảnh số, truyện tranh, chuyên mục chia sẻ kinh nghiệm lập nghiệp
    Gửi bởi thecao24_napthe trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 14-01-2013, 04:19 PM
  2. Trả lời: 3
    Bài viết cuối: 19-10-2011, 12:22 AM
  3. Lập trình C cách truyền tham số cho trị, tạo bản sao truyền cho hàm?
    Gửi bởi vietphuc91 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 30-10-2010, 12:19 AM
  4. Về vấn đề truyền con trỏ vào hàm (hay là truyền tham chiếu)
    Gửi bởi hieupm.it90 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 09-09-2010, 04:08 PM
  5. Phần mềm down truyện và đọc truyện tranh
    Gửi bởi tienlbhoc trong diễn đàn Thắc mắc chung
    Trả lời: 2
    Bài viết cuối: 23-12-2007, 12:51 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