Như những gì tôi biết về toán tử '&', nó trả về địa chỉ cơ sở của toán hạng trong bộ nhớ.Hiểu toán tử '&'
Chúng ta hãy tưởng tượng các tình huống sau (như trên máy tính của tôi):
- sizeof (int) = 4 byte
- sizeof (float) = 4 byte
- sizeof (char) = 1 byte
Bây giờ, nếu tôi viết một cái gì đó như thế này:
void main() {
int i = 5411;
int *ip = &i;
char *c = &i;
printf("%d",*ip);
printf("%c",*c);
}
printf đầu tiên() nên cho tôi 5411. Nói về printf thứ hai(), địa chỉ cơ sở của i chứa 10101001 (thứ tự cao hơn 8 bit = 1 byte cho con trỏ kiểu char). Do đó * c nên cho tôi 169, khi chuyển thành% c là ký tự không hợp lệ.
Nhưng trình biên dịch cho tôi '#' hoặc một số đầu ra hợp lệ khác. Tại sao nó như vậy ? Bất kỳ đầu vào?
EDIT (lấy từ bình luận của tác giả về một trong những câu trả lời):
Đó chỉ là một trường hợp giả, kể từ khi tôi đã ra khỏi máy thực tế.
Trường hợp thực tế là i = 5411
Trong mọi trường hợp, nếu bạn cố gắng "in" một "char", nó sẽ được hiển thị dưới dạng char, không phải là mã số nguyên tương ứng. –
có lẽ một cái gì đó để làm với mã hóa char đang được sử dụng, tôi sẽ đoán. –
Vâng tôi cũng đồng ý với điều đó. Nhưng phải có lý do để nhận giá trị '#' từ printf cuối cùng(). Nó không phải là một giá trị rác. –