Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 25 kết quả

Đề tài: Hỏi về con trỏ tí

  1. #1
    Ngày gia nhập
    03 2007
    Nơi ở
    Nhà hát của những giấc mơ
    Bài viết
    33

    Mặc định Hỏi về con trỏ tí

    Em làm thế này
    Code:
    #include <iostream.h>
    int main()
    {
        int *p=new int;
        for(int i=0;i<4;i++)
        {
            p+=1;
            cin >> *p;
        }    
        for(int i=3;i>=0;i--)
        {
            cout << *p;
            p--;
        }
        system("pause");            
    }
    như thế p ở đây liệu cỏ phải 1 mảng ko nhỉ , thắc mắc quá
    Phép toán trên là cộng địa chỉ nên ko phải là mảng phải ko các bác . hu

    Nhắc nhở source phải để trong tag [code].Alviss

  2. #2
    Ngày gia nhập
    09 2006
    Bài viết
    16

    theo mình nghĩ p ở đây chỉ là 1 con trỏ trỏ đến 1 biến kiểu int thôi. Cái phép toán cộng p+=1 của bạn là dịch đến 1 địa chỉ mới và 1 ở đây nó hiểu sẽ là địa chỉ mới đó cách địa chĩ cũ 1 số int tức là 4 byte
    nothing is impossible

  3. #3
    Ngày gia nhập
    03 2007
    Bài viết
    15

    Code:
    	int *p=new int;
    	for(int i=0;i<4;i++)
    	{
    		p+=1;
    		cin >> *p;
    	}
    Lúc đầu bạn tạo ra 1 biến con trỏ kiểu int.Sau đó :
    p += 1; => con trỏ đó sẽ trỏ đến 4 bytes kế tiếp vì con trỏ có kích thước 4 bytes
    cin >> *p => nơi mà con trỏ trỏ tới sẽ nhận giá trị nhập vào

    Code:
    	for(int i=3;i>=0;i--)
    	{
    		cout << *p;
    		p--;
    	}
    	system("pause");
    Cái này thì bạn xuất các giá trị tại nơi do con trỏ trỏ tới ra màn hình.
    Con trỏ cũng có thể được xem như là 1 mảng .
    ...Every step that I take is another mistake to you...I'm sorry mom..

  4. #4
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Cái gì trong vòng kiểm soát = code của mấy cậu thì mấy cậu quản lý, Code này có lỗi trầm trọng đấy. Code này cấp phát 4 byte (new int) mà đòi write tới 16 bytes, không chết mới là lạ.
    Tui có gần 10 năm kinh nghiệm debug code của các coder đã tốt nghiệp ĐH IT, các cậu chưa đủ khả năng bắt bẻ tui đâu.
    Đã được chỉnh sửa lần cuối bởi TQN : 20-10-2007 lúc 11:43 PM.

  5. #5
    Ngày gia nhập
    03 2007
    Nơi ở
    Nhà hát của những giấc mơ
    Bài viết
    33

    Bài làm trên có lỗi sử dụng mảng ko nhỉ
    Nếu là lỗi thì lỗi thế nào ạ

  6. #6
    Ngày gia nhập
    07 2007
    Bài viết
    41

    Mặc định Hỏi về con trỏ tí

    trùi TQN đã nói rõ vậy rùi còn không hiểu, cái bài đó nhìn qua là đã biết lỗi rùi.

  7. #7
    Ngày gia nhập
    10 2007
    Bài viết
    27

    Code này cấp phát 4 byte (new int) mà đòi write tới 16 bytes, không chết mới là lạ.
    Em thật sự chưa hiểu chỗ này anh T àh. Em không thấy được ở chỗ nào ghi "write tới 16 bytes" trong đoạn code trên. Anh chỉ em rõ hơn đi.

  8. #8
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Vòng for đó Rồng, cấp 4 byte new int. Sau đó vào vòng for lại seek con trỏ p tới 4 byte tiếp theo, cin vào vùng nhớ này, làm 4 lần. Thành ra 16 byte kế sau 4 byte vừa cấp bị write lên, còn 4 byte đầu lại không hề đụng tới nó.

  9. #9
    Ngày gia nhập
    03 2007
    Nơi ở
    Nhà hát của những giấc mơ
    Bài viết
    33

    bài này mình nghĩ là cộng địa chỉ cho con trỏ , sau đó ghi giá trị cho nó
    Code:
    #include <iostream.h>
    int main()
    {
    	int *p=new int;
    	for(int i=0;i<4;i++)
    	{
                    int so;
                    cin >> so; 
    		p+=1;
    		*p=so;
    	}	
    	for(int i=3;i>=0;i--)
    	{
    		cout << *p;
    		p--;
    	}
    	system("pause");			
    }
    Sửa lại thế này được ko vậy

  10. #10
    Ngày gia nhập
    03 2007
    Nơi ở
    Nhà hát của những giấc mơ
    Bài viết
    33

    mà đoạn trên cho p+=1; xuống dưới cin >> *p là được phải ko nhỉ
    cin >> *p;
    p+=1;

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