PDA

View Full Version : [Q] về const



natstd
29-01-2003, 00:13
Có phải khi khai báo là: const int i ( ví dụ ) thì sẽ có 1 storage trong bộ nhớ được dành riêng đề chứa i không ?
Giả sử em lại dùng 1 pointer (goi la ip) để chỉ vào ô nhớ đấy, rồi thay đổi giá trị chứa trong nó( compiler khong generate error nao ) . tại sao khi kiểm tra giá trị i thì giá trị của i không hề thay đổi . Trong khi đó *ip thì đã được thay đổi. Nhưng ip va &i dều chỉ cùng vào 1 storage trong mem cả !!!!
Hay là cái doan code sau của em có lỗi :
#include<iostream>
using namespace std;
int main(){
const int i=10;
int* ip=const_cast<int*>(&i);
*ip=100;
cout << "ip="<<ip<<"; &i "<<&i ; //addr giong nhau
cout << "*ip= "<<*ip <<"; i= " <<i;
/* ket qua in ra la ip=100 nhung i van la 10 ; */
}
Mong các bác chỉ bảo giúp !

tinystar
30-01-2003, 10:26
Vậy từ const để làm gì hả bạn ??!!!!

danceswithwolves
30-01-2003, 13:44
hi, trong tài liệu của Borland có chỉ ra cách gián tiếp thay đổi giá trị một const bằng con trỏ như sau (đã thử nhưng... không thành công :D):


const int i = 10; // constant declaration
*(int*)&i = 35; // vượt qua được compiler

tuy nhiên, kết quả y như những gì natstd@ nhận được. Có gì hơi lạ vì nếu truy ra addr thì trùng, nhưng khi truy xuất giá trị lại được 2 giá trị khác nhau. :D

to tinystar@ : đây là vấn đề nghịch ngợm thôi, rõ ràng không có ý nghĩa tích cực trong công việc lập trình. :D

natstd
30-01-2003, 15:53
nếu dich cái code cua bác nhảy với sói bằng compiler của C( cc ) thì thay đổi được const thật nhưng nếu =compiler của C++ ( g++ )thì không được dúng là one step beyond C hic :confused:

Lu Thanh Phu
24-12-2003, 19:35
Merry Christmas đến mấy Bác