Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 4 của 4

Chủ đề: Pointer

  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Pointer

    Mình mới gặp đoạn code này.
    Mã:
    #include<stdio.h>
    #include<conio.h>
    main()
    {
       int *q,a[10]={5,4,6,4,3,9,7,8,1,0};
       char *p;
       p=(char*)a;
       p++;
       q=(int*)p;
       printf("
    %d",*q);
       
    }
    Ai giải thích dùm mình với. Mình không hiểu tại sao kết quả in ra lại là 1024 cả.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Cái này là misaligned memory access rồi.
    Nếu là int 16bit:
    - Big-endian: Kết quả là 4
    - Little-endian: Kết quả là 4*2^8=1024.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trường hợp của bạn là Little endian (http://en.wikipedia.org/wiki/File:Big-little_endian.png) và int 16 bit

    Xét a[0] và a[1]:

    Mã:
    a[0] = 5: (first byte) 0000 0101 (second byte) 0000 0000
    a[1] = 4: (first byte) 0000 0100 (second byte) 0000 0000
    p = a:    (first byte) 0000 0101                                    
    p++ :                            (first byte)  0000 0000 
    q = p:                           (first byte)  0000 0000  (second byte) 0000 0100  ( lấy từ first byte của a[1])
    Biểu diễn giá trị của q: (first byte) 0000 0100 (second byte) 0000 0000

    Vậy q = 1024.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •