01/10/2018, 15:24

Sự khác nhau giữa char và const char*

Mình không thể cho const char* tham chiếu đến char. Mình không hiểu tại sao.

Cụ thể:

#include <iostream>
using namespace std;

const char* getName()
{
    return '
';
} 

Thì nó báo lỗi cannot convert from ‘char’ to ‘const char *’, nếu mình sửa ‘ ’ thành “ ” thì chạy trơn tru. Mình không hiểu cái này lắm.

rogp10 viết 17:36 ngày 01/10/2018

char* dùng để trỏ, còn ‘\n’ là cái được trỏ, sao gán được.

Tran Hai Dang viết 17:32 ngày 01/10/2018

Cho mình hỏi tại sao mình có thể gán vào “\n”?

rogp10 viết 17:32 ngày 01/10/2018

“\n” (khác ‘\n’ !) trước hết là một con trỏ, trỏ vào vùng nhớ có nội dung là ‘\n’, 0.

Xét ví dụ sau.

#include <iostream>
int main() { std::cout << "This is a test" + 5; }

is a test

Tran Hai Dang viết 17:38 ngày 01/10/2018

Theo mình hiểu thì string là array, và nó cũng có thể lưu địa chỉ của phần tử đầu tiên như array?

明玉 viết 17:25 ngày 01/10/2018

Sau này bạn có thể học môn assembly và nghiên cứu một tí về trình biên dịch, cấu trúc exe để rõ hơn, giờ chỉ cần biết rằng kiểu dữ liệu của kí tự (ví dụ ‘\n’) là char, còn kiểu dữ liệu của chuỗi kí tự (ví dụ “\n”) là char*.

rogp10 viết 17:39 ngày 01/10/2018

Đại thể là ngôn ngữ C (C++ sử dụng lại) không có kiểu chuỗi thật sự (hay riêng biệt), mà quy ước thành văn là char* (N1256/1570) và lấy byte 0 để kết thúc một chuỗi. [spoiler]Bạn code string giống bên Pascal vào cũng được (C mà!) thậm chí viết thẳng ra console luôn cũng được, nhưng…[/spoiler]

Về mảng thì bạn nói đúng (phải có địa chỉ), nhưng C không có kiểu chuỗi. Nói cách khác, bạn đang so khái niệm trừu tượng với chi tiết cài đặt. Các hằng chuỗi (string literals) cũng nên hiểu như vậy.

Bài liên quan
0