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

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

  1. #1
    Ngày gia nhập
    10 2015
    Bài viết
    2

    Mặc định 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
    Ngày gia nhập
    12 2007
    Bài viết
    31

    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 gia nhập
    10 2015
    Bài viết
    2

    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 gia nhập
    12 2007
    Bài viết
    31

    0 1 2 3 4 .............. 126 127 -128 -127 -126 -125 -124..............-2 -1 0 1 2 3........

  5. #5
    Ngày gia nhập
    04 2011
    Nơi ở
    Hà Nội
    Bài viết
    253

    Trích dẫn Nguyên bản được gửi bởi LPS86 Xem bài viết
    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.

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

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

    Đú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.
    Code:
    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 gia nhập
    04 2011
    Nơi ở
    Hà Nội
    Bài viết
    253

    Trích dẫn Nguyên bản được gửi bởi LPS86 Xem bài viết
    Đú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.
    Code:
    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
    Đã được chỉnh sửa lần cuối bởi greigaz : 25-10-2015 lúc 12:47 PM.

Tags của đề tài này

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