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

Đề tài: Địa chỉ nhớ của biến con trỏ!!!

  1. #1
    Ngày gia nhập
    03 2008
    Nơi ở
    Đà Nẵng city
    Bài viết
    40

    Wink Địa chỉ nhớ của biến con trỏ!!!

    Bài này mình viết ko lỗi, sory vì cố ý viết tiếng anh, code đây, sory vì ko dùng chức năng bọc code đc, thắc mắc mình nói ở cuối bài nha

    -Code:

    #include <stdio.h>
    #include <conio.h>

    main()
    {
    int var,*ptr;

    printf("\nEnter value of variable var : ");scanf("%d",&var);

    ptr=&var;

    printf("\nValue of variable var is : %d and var is stored at address %u",var,ptr);
    printf("\nValue of variable var ( using pointer ) is : %d",*ptr);
    printf("\nIncrement var by 1 : var = %d",++var);
    printf("\nDecrement var by 1 : var = %d",--var);
    printf("\nIncrement var by 1 ( using pointer ) : var = %d",++*ptr);
    printf("\nDecrement var by 1 ( using pointer ) : var = %d",--*ptr);

    *ptr++;

    printf("\nValue of the next interger after var is : %d and stored at addres %u.",*ptr,ptr);

    getch();

    }

    -Số nguyên tiếp theo đc C lưu ở địa chỉ lớn hơn địa chỉ biến var 4 byte, nhưng ko hiểu ở đây tại sao lại như vậy, vì vả đc khai báo là int , tức = 2 byte, vậy thì số tiếp nó phải lơn hơn nó 2 byte thôi, sao lại là 4 byte???

  2. #2
    Ngày gia nhập
    01 2008
    Bài viết
    240

    Trích dẫn Nguyên bản được gửi bởi camping29 Xem bài viết
    Bài này mình viết ko lỗi, sory vì cố ý viết tiếng anh, code đây, sory vì ko dùng chức năng bọc code đc, thắc mắc mình nói ở cuối bài nha

    -Code:

    #include <stdio.h>
    #include <conio.h>

    main()
    {
    int var,*ptr;

    printf("\nEnter value of variable var : ");scanf("%d",&var);

    ptr=&var;

    printf("\nValue of variable var is : %d and var is stored at address %u",var,ptr);
    printf("\nValue of variable var ( using pointer ) is : %d",*ptr);
    printf("\nIncrement var by 1 : var = %d",++var);
    printf("\nDecrement var by 1 : var = %d",--var);
    printf("\nIncrement var by 1 ( using pointer ) : var = %d",++*ptr);
    printf("\nDecrement var by 1 ( using pointer ) : var = %d",--*ptr);

    *ptr++;

    printf("\nValue of the next interger after var is : %d and stored at addres %u.",*ptr,ptr);

    getch();

    }

    -Số nguyên tiếp theo đc C lưu ở địa chỉ lớn hơn địa chỉ biến var 4 byte, nhưng ko hiểu ở đây tại sao lại như vậy, vì vả đc khai báo là int , tức = 2 byte, vậy thì số tiếp nó phải lơn hơn nó 2 byte thôi, sao lại là 4 byte???
    cái này còn tùy cậu dùng trình biên dịch nào?Nếu dùng VC++6.0 thì 4 bytes, còn nếu dùng đồ cổ TC++3.0 thì có 2 bytes
    Time

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

    Hình như đối với các compiler sau này int = 4 byte, chỉ có short = 2 byte thì phải. !

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

    như bạn nthung nói đúng rồi nhưng mình xin giải thích các bước như sau:

    lúc đầu ptr giữ địa chỉ của biến var(tạm gọi là var1) sau đó biến var tăng lên 1 đơn vị rồi giảm đi 1 đơn vị

    do ptr giữ giá trị của biến var1 nên khi lấy giá trị địa chỉ ô nhớ mà ptr trỏ tới sau đó tăng lên 1
    var1 tăng lên 1. tương tự var1 giảm xuống 1

    sau đó bạn tăng con trỏ lên 1 giá trị (di chuyển vùng nhớ lên 4 byte)
    với câu lệnh
    *ptr++: <==> *(ptr++).

  5. #5
    Ngày gia nhập
    03 2008
    Nơi ở
    Đà Nẵng city
    Bài viết
    40

    To ntthung: vậy hả, vậy hỉu goài, thx nha , mình còn 2 topic bài tập ngoài kia, rảnh thì giúp mình với, tất cả mấy bạn lun nha , hì

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

    Mặc định Địa chỉ nhớ của biến con trỏ!!!

    Trích dẫn Nguyên bản được gửi bởi camping29 Xem bài viết
    To ntthung: vậy hả, vậy hỉu goài, thx nha , mình còn 2 topic bài tập ngoài kia, rảnh thì giúp mình với, tất cả mấy bạn lun nha , hì
    đâu post lên đi cho anh em tham khảo
    Time

  7. #7
    Ngày gia nhập
    08 2008
    Nơi ở
    Liên Bang Nga
    Bài viết
    46

    Lạ nhỉ! Mình test thử, thì thấy 65526-65524 = 2, chứ có bằng 4 như bạn nói đâu nhỉ? Hay là cái RAM thế hệ mới của bạn, nó có cấu trúc CPU kiểu mới, dùng tận 4 byte để lưu số nguyên ? .....
    PHP Code:
    Enter value of variable var : 10

    Value of variable 
    var is 10 and var is stored at address 65524
    Value of variable 
    var ( using pointer is 10
    Increment 
    var by 1 : var = 11
    Decrement 
    var by 1 : var = 10
    Increment 
    var by 1 using pointer ) : var = 11
    Decrement 
    var by 1 using pointer ) : var = 10
    Value of the next interger after 
    var is and stored at addres 65526. 
    Tôi thường thích những cái gì mà tôi không bao giờ có được...

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

    Trích dẫn Nguyên bản được gửi bởi lienthang Xem bài viết
    Lạ nhỉ! Mình test thử, thì thấy 65526-65524 = 2, chứ có bằng 4 như bạn nói đâu nhỉ? Hay là cái RAM thế hệ mới của bạn, nó có cấu trúc CPU kiểu mới, dùng tận 4 byte để lưu số nguyên ? .....
    PHP Code:
    Enter value of variable var : 10

    Value of variable 
    var is 10 and var is stored at address 65524
    Value of variable 
    var ( using pointer is 10
    Increment 
    var by 1 : var = 11
    Decrement 
    var by 1 : var = 10
    Increment 
    var by 1 using pointer ) : var = 11
    Decrement 
    var by 1 using pointer ) : var = 10
    Value of the next interger after 
    var is and stored at addres 65526. 
    Nếu bạn dùng trên Windows thì nó hiểu kiểu int là 4 byte. còn bạn dùng trên dos(BC,TC ...) thì nó hiểu kiểu int là 2 byte. chứ nó không phụ thuộc vào Ram hay CPU như bạn nói.

  9. #9
    Ngày gia nhập
    03 2008
    Nơi ở
    Đà Nẵng city
    Bài viết
    40

    Mình còn vài bài ngoài kia, rảnh ghé ra xem rồi giúp với Topic này ok roi

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

  1. Lỗi chương trình không nhận biến(không return được biến từ public sang main)
    Gửi bởi nang trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 4
    Bài viết cuối: 02-10-2011, 06:04 PM
  2. Thuộc tính khóa ngoài( tham chiếu) biến mất khi biến đổi từ file XML sang DataTable
    Gửi bởi itmanhieu trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 17-08-2011, 08:02 PM
  3. làm sao để 2 biến Datetime trừ nhau ra biến float or double?
    Gửi bởi robocon1183 trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 1
    Bài viết cuối: 10-12-2009, 05:11 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