Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
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ố 12 kết quả

Đề tài: Code dùng pointer, không biết sai chỗ nào ?

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

    Mặc định Code dùng pointer, không biết sai chỗ nào ?

    code ne may ban,xem gium minh cai.


    Code:
    //loai bo phan tu trong mang dung con tro.
    
    #include<stdio.h>
    #include<conio.h>
    #include<alloc.h>
    
    void nhap(int *p,int n)
    {
     for(int i=0;i<n;i++)
     {
      printf("nhap vao phan tu p[%d]: ");
      scanf("%d",p+i);
     }
    }
    
    void xuat(int *p,int n)
    {
     for(int i=0;i<n;i++)
     {
      printf(" %d",*(p+i));
     }
    }
    
    void loaibo(int *p,int *n)
    {
     for(int i=0;i<*n;i++)
      for(int j=i+1;j<*n;j++)
       if(p[i]==p[j])
       {
        for(int x=i;x<*n-1;x++)
         p[x]=p[x+1];
        i=-1;
        break;
       }
    }
    
    void main()
    {
     int *p,n;
     printf("nhap vao so phan tu mang:");
     scanf("%d",&n);
     p=(int*)malloc(n*sizeof(int));
     nhap((int*)p,n);
     loaibo((int*)p,&n);
     printf("mang da loai bo phan tu trung:");
     xuat((int*)p,n);
    }
    Lần sau type không dấu là tui xóa thẳng tay nghe cậu !
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Đã được chỉnh sửa lần cuối bởi rox_rook : 07-10-2008 lúc 03:48 AM.

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

    Mình đã sửa, bạn xem cả cách trình bày nhé!
    Code:
    //loai bo phan tu trong mang dung con tro.
    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    
    void nhap(int *p,int n)
    {
    	for(int i=0;i<n;i++)
    	{
    		printf("nhap vao phan tu p[%d]: ",i);
    		scanf("%d",p+i);
    	}
    }
    
    void xuat(int *p,int n)
    {
    	for(int i=0;i<n;i++)
    	{
    		printf(" %d",*(p+i));
    	}
    }
    
    void loaibo(int *p,int *n)
    {
    	for(int i=0;i<*n;i++)          //n*-1 cung duoc
    		for(int j=i+1;j<*n;j++)
    			if(p[i]==p[j])
    			{
    				for(int x=j;x<(*n)-1;x++)
    				p[x]=p[x+1];
    				(*n)--;
    			}
    }
    
    int main()   // int do minh dung code block
    {
    	int *p,n;
    	printf("nhap vao so phan tu mang:");
    	scanf("%d",&n);
    	p=(int*)malloc(n*sizeof(int));
    	nhap(p,n);
    	loaibo(p,&n);
    	printf("mang da loai bo phan tu trung:");
    	xuat(p,n);
    	free(p);  //Go bo vung nho da cap phat
    }

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

    ey,bạn cho minh hỏi, tại sao luc bạn gọi hàm nhập(p,n); xuất(p,n); bạn không ép kiểu. lúc mình goi hàm như bạn, nó báo lỗi. nó bảo phải covert sang int*. ngia la pải khai báo như vậy. nhap((int*)p,n);xuat((int*)p,n))

    còn cái code trên
    Code:
    if(p[i]==p[j])
    			{
    				for(int x=j;x<(*n)-1;x++)     (1)
    				p[x]=p[x+1];           
    				(*n)--;                            (2)
    			}
    ngay dòng số (1), (*n)-1,nghĩa là nội dung đã giảm đi 1, tại sao xuống dòng (2), bạn lại tiếp tục giảm đi 1 nữa. nghĩa là khi ra khỏi vòng lặp thi (*n) đã giảm đi 2 hả bạn. mình vẫn chưa hiểu lắm. bạn giải thích giùm mình cái nha.
    Đã được chỉnh sửa lần cuối bởi nguyenminhdanh : 06-10-2008 lúc 05:25 PM.

  4. #4
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    C Code:
    1. x<(*n)-1
    đây là phép so sánh đâu có làm giảm giá trị của biến n
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  5. #5
    Ngày gia nhập
    09 2008
    Bài viết
    19

    1. Trong hàm main đã khai báo p là con trỏ trỏ tới biến int (int *p) thì còn ép kiểu gì nữa chài :-??

    2. Dòng số (1) ta chỉ lấy giá trị của *n trừ cho 1, chứ không gán lại vào *n, nên *n vẫn giữ nguyên giá trị của nó.
    Dòng (2) ta có thể viết lại là (*n) = (*n) - 1; -> nên giá trị của *n sẽ thay đổi.

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

    Mặc định Code dùng pointer, không biết sai chỗ nào ?

    1. Trong hàm main đã khai báo p là con trỏ trỏ tới biến int (int *p) thì còn ép kiểu gì nữa chài :-??
    mình cũng hiểu vậy, là không cân ép kiểu nữa. nhung cái borlandc của mình chạy nó cứ báo lỗi. nó bắt mình pải ép kiểu. bat pải la (int*)p. mình không hiểu sao nữa.cac bạn giải thích giùm mình cái.


    PHP Code:
    2. Dòng số (1ta chỉ lấy giá trị của *n trừ cho 1chứ không gán lại vào *nnên *n vẫn giữ nguyên giá trị của nó.
    Dòng (2ta có thể viết lại là (*n) = (*n) - 1; -> nên giá trị của *n sẽ thay đổi
    thanks ban. bi giờ thì mình đã hiểu. ah, ma nếu minh khong có dấu ngoặc *n-- thì chiền gì sẽ xảy ra hả mấy bạn.
    Đã được chỉnh sửa lần cuối bởi nguyenminhdanh : 06-10-2008 lúc 06:23 PM.

  7. #7
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Trích dẫn Nguyên bản được gửi bởi nguyenminhdanh Xem bài viết
    mình cũng hiểu vậy, là không cân ép kiểu nữa. nhung cái borlandc của mình chạy nó cứ báo lỗi. nó bắt mình pải ép kiểu. bat pải la (int*)p. mình không hiểu sao nữa.cac bạn giải thích giùm mình cái.

    Bạn xem kỹ nó báo lỗi dòng nào ? Câu báo lỗi tiếng anh là như thế nào ?

    PHP Code:
    2. Dòng số (1ta chỉ lấy giá trị của *n trừ cho 1chứ không gán lại vào *nnên *n vẫn giữ nguyên giá trị của nó.
    Dòng (2ta có thể viết lại là (*n) = (*n) - 1; -> nên giá trị của *n sẽ thay đổi
    thanks ban. bi giờ thì mình đã hiểu. ah, ma nếu minh khong có dấu ngoặc *n-- thì chiền gì sẽ xảy ra hả mấy bạn.
    *n-- tức là trừ giá trị của biến con trỏ n đi 1 ô nhớ.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  8. #8
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Trích dẫn Nguyên bản được gửi bởi nguyenminhdanh Xem bài viết
    mình cũng hiểu vậy, là không cân ép kiểu nữa. nhung cái borlandc của mình chạy nó cứ báo lỗi. nó bắt mình pải ép kiểu. bat pải la (int*)p. mình không hiểu sao nữa.cac bạn giải thích giùm mình cái.

    PHP Code:
    2. Dòng số (1ta chỉ lấy giá trị của *n trừ cho 1chứ không gán lại vào *nnên *n vẫn giữ nguyên giá trị của nó.
    Dòng (2ta có thể viết lại là (*n) = (*n) - 1; -> nên giá trị của *n sẽ thay đổi
    thanks ban. bi giờ thì mình đã hiểu. ah, ma nếu minh khong có dấu ngoặc *n-- thì chiền gì sẽ xảy ra hả mấy bạn.
    Bạn xem kỹ nó báo lỗi dòng nào ? Câu báo lỗi tiếng anh là như thế nào ?
    *n-- tức là trừ giá trị của biến con trỏ n đi 1 ô nhớ.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  9. #9
    Ngày gia nhập
    09 2008
    Bài viết
    19

    *n--; sẽ làm thay đổi giá trị con trỏ n, và không thay đổi giá trị biến int mà n trỏ tới. Trong trường hợp này nó tương đương với n--;
    Nếu bạn dùng trong 1 biểu thức hay hàm thì nó sẽ lấy giá trị (*n) để tính trước, sau đó dịch con trỏ n đi. Vd:
    Code:
    printf("%d\n", *n--);
    Tương đương với:
    Code:
    printf("%d\n", *n);
    n--;

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

    *n--; sẽ làm thay đổi giá trị con trỏ n, và không thay đổi giá trị biến int mà n trỏ tới. Trong trường hợp này nó tương đương với n--;
    Nếu bạn dùng trong 1 biểu thức hay hàm thì nó sẽ lấy giá trị (*n) để tính trước, sau đó dịch con trỏ n đi. Vd:
    Hoàn toàn không chính xác.

    Trong bài trên
    Code:
    void loaibo(int *p,int *n)
    giá trị đưa vào là con trỏ n trỏ đến vùng nhớ lưu giữ một giá trị là *n

    Hiểu đơn giản và chính xác như vậy, ta sẽ thấy (*n)-- là đang làm giảm giá trị ở vùng nhớ n trỏ đến.

    n trong hàm là biến con trỏ hoàn toàn khác với thân hàm ở đó n là biến nguyên.
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

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

  1. Bài tập C Lỗi chương trình đảo ngược chuỗi dùng pointer
    Gửi bởi thoai_phamkhac trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 27-06-2013, 08:15 AM
  2. Dùng malloc đối với biến cấu trúc, chức năng của getch và code đã tối ưu chưa?
    Gửi bởi vtd93 trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 3
    Bài viết cuối: 19-10-2011, 12:55 AM
  3. Bài tập so sánh 2 số thực dùng void pointer
    Gửi bởi ailoan trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 17
    Bài viết cuối: 13-03-2011, 05:55 PM
  4. Code tạo và lưu file dùng cho biến con trỏ. Giúp em vs.
    Gửi bởi why0591 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 19-12-2010, 05:04 PM
  5. Cách dùng function pointer trong hàm hook?
    Gửi bởi Kỳ Nam trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 5
    Bài viết cuối: 13-07-2009, 03:32 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