30/09/2018, 17:39

Toán tử sizeof trong C

A Đạt ơi,hiện tại em chưa hiểu rõ lắm về toán tử size of,em đã xem video anh day,va tìm hiểu trên mạng rồi nhưng em vẫn chưa năm được vấn đề.A có thể giúp em hiểu rõ bản chất hơn vủa sizeof trong một vài trường hợp được ko ah.

{
char*p;
printf("%d %d",sizeof(*p),sizeof(p));
}

kết quả là 1 4,em không hiểu lắm.em chi hiểu là contro p o dang char.ma char thi dung luong 1 byte,anh có thể nói rõ cặn cẽ cho em đinh nghĩa,và ý nghĩa từng câu lệnh trên được không anh.

Chi Ngo viết 19:56 ngày 30/09/2018

Kích thước của một phần tử kiểu char là 1 còn kích thước của một con trỏ thì tùy thuộc vào máy. Ta hiểu đơn giản, khi khai báo con trỏ thì phải có một nơi nào đó lưu lại giá trị của con trỏ đó (thực chất ở đây là một số nguyên chỉ số thứ tự trên bộ nhớ). Như vậy, trên máy của bạn địa chỉ hay giá trị của con trỏ có kích thước là 4 nên khi sử dụng toán tử sizeof(p) sẽ được giá trị là 4.

sizeof() là hàm trả ra dung lượng bộ nhớ được cấp phát cho phần tử ở trong sizeof()

Theo đó char* p; là hành vi khai báo một con trỏ để chỉ đến một ô nhớ có kiểu char.

sizeof(*p) là kích thước của ô nhớ mà p đang chỉ tới. Ô nhớ này kiểu chả mặc định giá trị là \0 nên sẽ có giá trị là 1bytes = 8bit.
sizeof(p) là kích thước của ô nhớ đang chứa p. p là kiểu con trỏ nên nó sẽ lưu 1 địa chỉ nhớ. Địa chỉ nhớ này có độ rộng là 4 bytes = 32bit. Nếu bạn dùng bản 64bit thì kích thước này sẽ là 8bytes

Cái này mình học cũng 4 năm rồi chẳng dùng nên nếu sai sót bỏ quá cho. Bao giờ hỏi về Android mình lại chém mạnh tay…

Bài liên quan
0