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 7 của 7
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    A/c giỏi c++ giúp giùm e mấy bài này với.

    Kết quả của chương trình dưới đây là gì? Hãy giải thích.

    #include <stdio.h>

    int main(){

    int i = 158;

    char c = i;

    int j = c;

    printf("%d",j);

    return 0;

    }
    Hãy giải thích điều gì xảy ra khi chạy đoạn mã sau:

    void main(){

    char * p = new char[30];

    p = "hello";

    delete [] p;

    }
    Kết quả in ra màn hình của đoạn mã sau là gì? Giải thích.

    #include <stdio.h>

    #define add(x, y, z) x + y + z

    int main(){

    float a = (add(10, 2, 1) * 5.0f);

    printf("%f",a);

    return 0;

    }

  2. #2
    Cái đầu = -98. Vì ở dòng char c = i; tương đương char c = 158; Nhưng kiểu char nhận giá trị 1 byte. Do đó khi quá nó sẽ vòng ngược lại, giống vòng tròn ấy. Nghĩa là c = 127 + 31. Từ -128 đến -99 là có 30 giá trị. Vậy giá trị thứ 31 là -98.
    Cái thứ hai là một con trỏ tên p, trỏ đến một mảng char có 30 phần tử. Nghĩa là cấp một vùng nhớ có 30 byte và cho p nhớ địa chỉ của 30 byte này. Sau đó gán các char h,e,l,l,o,\0 vào vùng 30 byte này. Cuối cùng là delete p nghĩa là delete cái ô nhớ ghi địa chỉ của 30 byte kia, chứ không delete nội dung của 30 byte
    ra kết quả là 17 do add(10, 2, 1) sẽ được thay bằng 10 + 2 + 1 vậy câu lệnh sẽ thành (10 + 2 + 1 * 5.0f); Nhân ưu tiên trước => 10+2+5 = 17

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bạn có thể giải thích giùm cái vòng tròn được không, mình không hiểu lắm.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi LPS86
    Cái thứ hai là một con trỏ tên p, trỏ đến một mảng char có 30 phần tử. Nghĩa là cấp một vùng nhớ có 30 byte và cho p nhớ địa chỉ của 30 byte này. Sau đó gán các char h,e,l,l,o,\0 vào vùng 30 byte này. Cuối cùng là delete p nghĩa là delete cái ô nhớ ghi địa chỉ của 30 byte kia, chứ không delete nội dung của 30 byte
    sai.
    sau khi gán p = "hello" thì p trỏ đến 1 vùng mới, không còn là cái 30 byte kia nữa. delete[] p sẽ gây lỗi.

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    0 1 2 3 4 .............. 126 127 -128 -127 -126 -125 -124..............-2 -1 0 1 2 3........

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Đúng là delete[] p sẽ gây lỗi nhưng nói "sau khi gán p = "hello" thì p trỏ đến 1 vùng mới" thì chưa hẳn.
    Mã:
    char * p = new char[30];
    Nói một cách chính xác là nó tạo một vùng nhớ động cho con trỏ p là một mảng đối tượng của lớp char trên heap. Bạn vẫn có thể truy cập đến dữ liệu của mảng này qua p nên sao thể nói nó trỏ đến một vùng mới được chứ :v

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi LPS86
    Đúng là delete[] p sẽ gây lỗi nhưng nói "sau khi gán p = "hello" thì p trỏ đến 1 vùng mới" thì chưa hẳn.
    Mã:
    char * p = new char[30];
    Nói một cách chính xác là nó tạo một vùng nhớ động cho con trỏ p là một mảng đối tượng của lớp char trên heap. Bạn vẫn có thể truy cập đến dữ liệu của mảng này qua p nên sao thể nói nó trỏ đến một vùng mới được chứ :v
    thử là biết ngay ý mà, chứ bạn nghĩ tại sao nó lỗi?
    http://ideone.com/E2L9KY

 

 

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
  •