Giải thích kết quả của lệnh sizeof

c++

(Le Quang Cuong) #1
#include<iostream.h>
#include<fstream.h>
main(){
	int *a,n;
	fstream f("matran.txt",ios::in);
	if(!f.is_open()){
		cout<<"Khong the mo file.";
		return 0;
	}
	else{
		f>>n;
		a=new int [n*n];

	}
	cout<<sizeof(n)<<endl<<sizeof(a)<<endl<<n*n;
}

Cho em hỏi sau khi chạy sao nó lại ra sizeof(n)=4, sizeof(a)=4, n*n=9.

file matran.txt là:
3
1 2 3
4 5 6
7 8 9

Em mới học nên chưa rành lắm mong anh chị chỉ bảo.


(Trương Tấn Phát) #2

sizeof() là số ô nhớ (byte) mà biến được cấp phát.
Kiểu int là 4 byte.
n*n là tính giá trị của n.
Giá trị n được lưu trong bộ nhớ:

03 00 00 00

(Florastamine) #3

sizeof(a) trả về kích thước của kiểu dữ liệu của a. à là gì? Là int *. Với x86 thì int * = 4 bytes, x86-64 là 8 bytes. Pointer để đếm address, mà address thì cố định kích thước theo arch của CPU, nên int * hay long * hoặc char * cũng sẽ có cùng giá trị.

sizeof(n) = 4 thì rõ ràng vì int bằng 4 bytes


83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?