Khi nào tôi nên sử dụng dấu ngoặc đơn và dấu ngoặc kép trong lập trình C hoặc C ++?
Khi nào tôi nên sử dụng dấu ngoặc đơn và dấu ngoặc kép trong lập trình C hoặc C ++?
Câu trả lời:
Trong C và trong C ++, các trích dẫn đơn xác định một ký tự đơn, trong khi các trích dẫn kép tạo ra một chuỗi ký tự. 'a'
là một ký tự đơn, trong khi đó "a"
là một chuỗi ký tự chứa một 'a'
và một bộ kết thúc null (đó là một mảng 2 char).
Trong C ++ loại một chữ nhân vật là char
, nhưng lưu ý rằng trong C, loại một chữ nhân vật là int
, đó là sizeof 'a'
là 4 trong một kiến trúc nơi ints là 32bit (và CHAR_BIT là 8), trong khi sizeof(char)
là 1 ở khắp mọi nơi.
Một số trình biên dịch cũng thực hiện một phần mở rộng, cho phép các hằng số nhiều ký tự. Tiêu chuẩn C99 cho biết:
6.4.4.4p10: "Giá trị của hằng số ký tự nguyên chứa nhiều hơn một ký tự (ví dụ: 'ab') hoặc chứa một ký tự hoặc chuỗi thoát không ánh xạ tới ký tự thực thi một byte, được xác định theo thực thi. "
Điều này có thể trông như thế này, ví dụ:
const uint32_t png_ihdr = 'IHDR';
Hằng số kết quả (trong GCC, thực hiện điều này) có giá trị bạn nhận được bằng cách lấy từng ký tự và dịch chuyển nó lên, sao cho 'I' kết thúc bằng các bit quan trọng nhất của giá trị 32 bit. Rõ ràng, bạn không nên dựa vào điều này nếu bạn đang viết mã độc lập với nền tảng.
Dấu ngoặc đơn là ký tự ( char
), dấu ngoặc kép là chuỗi kết thúc null ( char *
).
char c = 'x';
char *s = "Hello World";
const char *
.
Dấu ngoặc đơn là cho một ký tự duy nhất. Dấu ngoặc kép là cho một chuỗi (mảng ký tự). Bạn có thể sử dụng dấu ngoặc đơn để xây dựng một chuỗi ký tự một lần, nếu bạn muốn.
char myChar = 'A';
char myString[] = "Hello Mum";
char myOtherString[] = { 'H','e','l','l','o','\0' };
Tôi đã chọc vào những thứ như: int cc = 'cc'; Nó xảy ra rằng về cơ bản nó là một bản sao byte khôn ngoan thành một số nguyên. Do đó, cách để xem xét đó là 'cc', về cơ bản là 2 c được sao chép xuống 2 byte của số nguyên cc. Nếu bạn đang tìm kiếm một câu đố, sau đó
printf("%d %d", 'c', 'cc'); would give:
99 25443
đó là vì 25443 = 99 + 256 * 99
Vì vậy, 'cc' là hằng số đa ký tự và không phải là một chuỗi.
Chúc mừng
Dấu ngoặc kép dành cho chuỗi ký tự, ví dụ:
char str[] = "Hello world";
Dấu ngoặc đơn là dành cho các ký tự đơn, ví dụ:
char c = 'x';
EDIT Như David đã nói trong một câu trả lời khác, loại chữ của một nhân vật là int
.
char str[] = {'H','e','l','l','o'};
, và str
sẽ không có một terminator null.
str
không phải là một chuỗi (ít nhất, không phải là chuỗi kiểu C, được xác định là NTBS).
char[]
(mọi người thường gọi là "chuỗi") đều bị chấm dứt.
"hello" /*seamlessly connected to*/ "world"
. Và điều này có thể có ý nghĩa cho các tin nhắn nhiều dòng nhận xét.
Trong C, các dấu ngoặc đơn như 'a' chỉ ra các hằng ký tự trong khi "a" là một mảng các ký tự, luôn được kết thúc bằng 0 ký tự
Trích dẫn đơn được sử dụng cho ký tự, trong khi trích dẫn kép được sử dụng cho chuỗi.
printf("%c \n",'a');
printf("%s","Hello World");
một thế giới xin chào
Nếu bạn đã sử dụng chúng trong trường hợp ngược lại và sử dụng trích dẫn đơn cho chuỗi và trích dẫn kép cho ký tự. Ở đây, đây sẽ là kết quả;
printf("%c \n","a");
printf("%s",'Hello World');
cho dòng đầu tiên. Bạn sẽ có giá trị rác hoặc bất ngờ. Hoặc bạn có thể có đầu ra như thế này ..
�
trong khi cho tuyên bố thứ hai. Bạn sẽ không thấy gì cả. Một điều nữa. Nếu bạn có thêm tuyên bố sau này. Họ cũng sẽ không cho bạn kết quả.
Lưu ý: Ngôn ngữ PHP cho phép bạn linh hoạt sử dụng trích dẫn đơn và kép một cách dễ dàng.
Dấu ngoặc đơn là biểu thị một char, gấp đôi biểu thị một chuỗi.
Trong Java, nó cũng giống nhau.