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

Đề tài: Hỏi về con trỏ đến mảng trong hàm??

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

    Question Hỏi về con trỏ đến mảng trong hàm??

    Mình có 1 hàm như sau:

    Code:
    void add(int *ptr,int num, int a)
    {
    int i;
    for(i=0;i<num;i++)
    *(ptr)=*(ptr++)+a;
    }
    Vậy khi gọi hàm:
    Code:
    add(array,SIZE,x);
    với
    Code:
    int array[]={2,5,6,9};
    int SIZE=4;
    int x=10;
    Khi cho xuất ra mảng kết quả thì được như sau:
    Code:
    12 15 16 19
    Các bạn hãy giải thích giúp mình dòng này:
    Code:
    *(ptr)=*(ptr++)+a;
    tại sao kết quả lại ra như vậy????

    Cảm ơn.

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

    Code này bạn nhặt ở đâu ra vậy?
    Người viết không phải là dân chuyên nghiệp viết về con trỏ. Tìm hiểu code làm chi cho mất công.

    code cho đúng là:
    C Code:
    1. void add(int *ptr, int num, int a)
    2. {
    3.   while (num--) *ptr++ += a; // cộng a vào trị ở vị trí ptr hiện tại dời ptr tới phần tử kế tiếp
    4. }
    Đã được chỉnh sửa lần cuối bởi VoTichSu : 29-02-2012 lúc 08:21 AM.

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

    Trích dẫn Nguyên bản được gửi bởi VoTichSu Xem bài viết
    Code này bạn nhặt ở đâu ra vậy?
    Người viết không phải là dân chuyên nghiệp viết về con trỏ. Tìm hiểu code làm chi cho mất công.

    code cho đúng là:
    C Code:
    1. void add(int *ptr, int num, int a)
    2. {
    3.   while (num--) *ptr++ += a; // cộng a vào trị ở vị trí ptr hiện tại dời ptr tới phần tử kế tiếp
    4. }
    Mình nhờ giải thích tại sao mà, chứ có bàn chuyện code đẹp xấu đâu.

  4. #4
    Ngày gia nhập
    12 2011
    Nơi ở
    TP HCM
    Bài viết
    3

    Trích dẫn Nguyên bản được gửi bởi nlhuykhang Xem bài viết
    Mình có 1 hàm như sau:
    Các bạn hãy giải thích giúp mình dòng này:
    Code:
    *(ptr)=*(ptr++)+a;
    Cảm ơn.
    Theo mình thế này!.
    ptr++ : là tăng địa chỉ lên 1*sizeof (int), bạn chú ý đến "++" nằm ở sau nhé.
    Sau khi: giá trị ptr trỏ tới (ban đầu là a[0])= giá trị ptr trỏ tới + a thì phép "++" mới được thực hiện, vậy đến lần lặp thứ 2 ta có: giá trị ptr trỏ tới (giờ là a[1])= giá trị ptr trỏ tới + a.
    Từ đó bạn biết kết quả tại sao như vậy rồi nhé.
    Có gì sai mấy bạn sửa giúp mình nhé!.
    Mình rất muốn cùng nhau trao đổi học hỏi với các tất cả các bạn dù bạn mới nhập môn hay đã thành "sư phụ".....(mình nhập môn thôi=)))
    Cùng học tập nhé....nick:cauberong_09.

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

    Trích dẫn Nguyên bản được gửi bởi cauberong09 Xem bài viết
    Theo mình thế này!.
    ptr++ : là tăng địa chỉ lên 1*sizeof (int), bạn chú ý đến "++" nằm ở sau nhé.
    Sau khi: giá trị ptr trỏ tới (ban đầu là a[0])= giá trị ptr trỏ tới + a thì phép "++" mới được thực hiện, vậy đến lần lặp thứ 2 ta có: giá trị ptr trỏ tới (giờ là a[1])= giá trị ptr trỏ tới + a.
    Từ đó bạn biết kết quả tại sao như vậy rồi nhé.
    Có gì sai mấy bạn sửa giúp mình nhé!.
    Mình hiểu rồi cảm ơn bạn nha.

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