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

c++

(Tran Hai Dang) #1

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 '\n';
} 

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


(rogp10) #2

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


(Tran Hai Dang) #3

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


(rogp10) #4

“\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) #5

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?


(明玉) #6

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) #7

Đạ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.

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… :smiley:

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.


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