01/10/2018, 09:23

Thắc mắc về bộ nhớ khi ép kiểu trong C++

Giả sử mình có 2 dòng lệnh sau:

int x = 5;
(float)x;

Các bạn cho mình hỏi khi thực hiện dòng lệnh thứ hai (float) x; thì máy tính sẽ tự tạo ra vùng nhớ mới để lưu trữ giá trị của số nguyên x vừa chuyển thành số thực hay nó trực tiếp mở rộng vùng nhớ cũ của số nguyên x để lưu trữ?

Tâm Ninja viết 11:34 ngày 01/10/2018

Dòng lệnh thứ hai của bạn được gọi là Dummy code và nó sẽ bị bỏ qua khi comlipe làm việc. Về cơ bản thì việc ép kiểu có hai nguyên tắc. Một là phải có nơi chứa nó, hai là nó không được phép làm ảnh hưởng đến dữ liệu của biến mà nó thực hiện ép. Vậy nên điều ở dưới sẽ không xảy ra.[quote=“phamlamnd, post:1, topic:45410”]
trực tiếp mở rộng vùng nhớ cũ của số nguyên x để lưu trữ
[/quote]

Và điều ở dưới chỉ xảy ra khi viết lại code như sau:

vùng nhớ mới để lưu trữ giá trị của số nguyên x

int x = 5;
float y = (float)x;

Thêm nữa là câu này chỉ đúng khi bạn là người khai báo vị trí mới cho nó như trên:

máy tính sẽ tự tạo ra vùng nhớ mới

IT viết 11:33 ngày 01/10/2018

Cảm ơn bạn đã chỉ giáo.

Trần Hoàn viết 11:26 ngày 01/10/2018

ép kiểu không phải là phép gán mà là một phép tính. (float)x có thể được diễn giải dưới dạng hàm như sau:

fLoAt(int x)
{
    float y = x;
    return  y;
}

chạy xong hàm, trả về giá trị của y xong, nếu không dùng biến nào đó để lưu lại (ví dụ a = (float)b) là mất luôn. Tuy nhiên ép kiêu không phải là hàm, bạn mà để trống không một mình một lệnh thế kia là chương trình báo lỗi liền :))

IT viết 11:31 ngày 01/10/2018

Cảm ơn bạn, nhưng mình để trống vẫn được mà.

Tâm Ninja viết 11:32 ngày 01/10/2018

Cái đó cần chút kiến thức liên quan đến compiler nhưng mà vấn đề cụ thể là đoạn code kia của bạn nó không có ý nghĩa gì cả.

Trần Hoàn viết 11:31 ngày 01/10/2018

Uk, mình cũng chạy thử, đúng là Visual C++ không báo lỗi. Nó không có ý nghĩa gì, tuy nhiên nếu ép kiểu không thành công thì có thể gây lỗi gì đó

Bài liên quan
0