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

Đề tài: Dùng con trỏ để coppy một mảng

  1. #1
    Ngày gia nhập
    03 2008
    Nơi ở
    Hồ chí minh
    Bài viết
    134

    Mặc định Dùng con trỏ để coppy một mảng

    Mọi người xem hộ mình bài này với!mình mới học về con trỏ chưa hiểu lắm,toàn tự mò nên không hiểu bản chất của nó cho lắm,
    đây là bài mình làm,không sai lỗi cú pháp mà bị sai cái gì khác mình không hiểu.
    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<iostream.h>
    #include<stdlib.h>
    #include<string.h>
    struct MANG
      {
          int N;
          int *a ;
      };
       int *Tao (int spt)//ham tra ve con tro kieu int
      {
                  int *p;
                  p=(int*) calloc (spt,sizeof(int));/*cap mot mang dong 
    			  gom spt phan tu */
                  if (!p) return NULL ;//neu khong cap duoc thi tra ve gia tri NULL 
                  return p;//neu duoc con tro tro ve gia tri dau tien cua mang
      }
       
      void Nhap(MANG &m,int N)//ham nhap mang
      {
                  int i ;
                  for (i=0;i<N ;i++ ) ;
                  scanf ("%d", &m.a[i]);
      }
       
      void Saochep(MANG m,MANG n,int N)
      {
                  n.N = m.N ;
                  n.a = (int*)calloc (n.N, sizeof(int));
                  if (!n.a) return ;
                  memcpy (n.a ,m.a,n.N * sizeof(int) );
      }
       
     int main ()
      {
                  MANG m,n ;
                  int spt ;
                  printf("Nhap spt :");
                  scanf ("%d", &spt);
                  m.a = Tao(spt);
                  if (!m.a) 
    			  {		printf("khong du bo nho");
    						return NULL;
    			  }
    			  else
    			  {
    				Nhap(m,spt); 
    				Saochep(m,n,spt);
    			  }
    			
                
      }
    Every step I'm taking
    Every move I make
    Feels lost with no direction
    My faith is shaking
    But I gotta keep trying.

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

    Trước hết mình muốn hỏi bạn bạn muốn viết bằng C hay C++, code dưới rõ ràng là code C. Từ cách dùng nhập xuất đến cấp phát bộ nhớ, chỉ có khai báo thêm mấy thư viện của C++.

    Mình sửa code của bạn đi nhiều, có thể đã sai khác ý tưởng của bạn, nhưng bạn nên tham khảo nó để hiểu rõ hơn về struct và con trỏ.

    Bạn chú ý cả cách trình bày code.

    C Code:
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3.  
    4. struct MANG
    5. {
    6.     int N;
    7.     int *a ;
    8. };
    9.  
    10. void Tao (MANG &p)
    11. {
    12.     p.a=(int*) calloc (p.N,sizeof(int));
    13.     if (!p.a) printf("Loi cap phat!!!");
    14. }
    15.  
    16. void Nhap(MANG &m)//ham nhap mang
    17. {
    18.     int i ;
    19.     Tao(m);
    20.     for (i=0;i<m.N ;i++ )
    21.     {
    22.         printf(" - Phan tu thu %d la: ",i+1);
    23.         scanf ("%d", &m.a[i]);
    24.     }
    25. }
    26.  
    27. void Saochep(MANG m,MANG &n)
    28. {
    29.    Tao(n);
    30.    n=m;
    31. }
    32.  
    33. void Huy(MANG &m)
    34. {
    35.     free(m.a);
    36. }
    37.  
    38. int main ()
    39. {
    40.             MANG m,n ;
    41.             printf("Nhap spt :");
    42.             scanf ("%d", &m.N);
    43.             Nhap(m);
    44.             Saochep(m,n);
    45.             Huy(m);
    46.             Huy(n);
    47. }

  3. #3
    Ngày gia nhập
    03 2008
    Nơi ở
    Hồ chí minh
    Bài viết
    134

    cảm ơn QuangHoang nhiều.
    Every step I'm taking
    Every move I make
    Feels lost with no direction
    My faith is shaking
    But I gotta keep trying.

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

    Code QuangHoang viết rất tốt nhưng còn 1 chỗ chưa handle
    C++ Code:
    1. void Tao (MANG &p)
    2. {
    3.     p.a=(int*) calloc (p.N,sizeof(int));
    4.     if (!p.a) printf("Loi cap phat!!!");
    5. }
    Giả nếu hàm printf được in ra thì hàm này chạy ra sao ta ?
    C Code:
    1. void Nhap(MANG &m)//ham nhap mang
    2. {
    3.     int i ;
    4.     Tao(m);
    5.     for (i=0;i<m.N ;i++ )
    6.     {
    7.         printf(" - Phan tu thu %d la: ",i+1);
    8.         scanf ("%d", &m.a[i]);
    9.     }
    10. }

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

    Ối chết, em chẳng để ý gì, cảm ơn anh nhiều. Không biết em sửa vậy có hiệu quả không.

    C Code:
    1. int Tao (MANG &p)
    2. {
    3.     p.a=(int*) calloc (p.N,sizeof(int));
    4.     if (!p.a) {printf("Loi cap phat!!!");return 0;}
    5.     return 1;
    6. }

    Code:
    void Nhap(MANG &m)//ham nhap mang
    {
        int i ;
        if (Tao(m))
        for (i=0;i<m.N ;i++ )
        {
            printf(" - Phan tu thu %d la: ",i+1);
            scanf ("%d", &m.a[i]);
        }
    }

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

    Mặc định Dùng con trỏ để coppy một mảng

    return code cũng là 1 good design !
    Dù sao đi nữa cũng phải coi kĩ lại hết :
    C++ Code:
    1. Saochep(m,n);
    2.             Huy(m);
    3.             Huy(n);
    Phải ngăn chặn hết tất cả các lời gọi hàm này luôn nhé !

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

  1. ADO.NET Coppy TabPage trong TabControl C#
    Gửi bởi squall016 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 02-10-2013, 12:04 AM
  2. Kỹ thuật C++ coppy file sang o dia khac
    Gửi bởi minhhoangtoday trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 24-02-2013, 08:29 PM
  3. không Coppy file vào ổ C đc?
    Gửi bởi mysad trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 7
    Bài viết cuối: 03-12-2010, 11:07 AM
  4. Lập trình C++ | Tạo file văn bản và coppy dữ liệu trên c++
    Gửi bởi vo thi ut loi trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 03-06-2009, 02:48 PM
  5. Lập trình C++ | Coppy ảnh vào một biến con trỏ trên C++ như thê snaof?
    Gửi bởi C_moi_hoc 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: 02-06-2009, 09:24 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