0
What is char * ?
i am not able to understand the difference between char array and char * can you have any idea about that please tell me..
3 ответов
+ 5
I suppose these links can explain better than I could apparently ; )
https://www.quora.com/What-is-the-difference-between-char*-and-char
https://www.geeksforgeeks.org/whats-difference-between-char-s-and-char-s-in-c/
Hth, cmiiw
+ 4
@Freddy thanks for corrections!
(I have edited my post)
+ 1
Here is a copy from Ipang's answer with my comments in between (the lines with /// in front):
int main()
{
// a char array requires null terminator,
/// No it doesn't. A char array is just an array of chars.
/// A char is an 8 bit signed datatype that can hold values
/// from -128 to 127. If you want to use a char array as a
/// C type string you indeed need a '\0' terminator.
// that's why we allocated 6 elements here
// but we only initialize 5 of them,
// the 6th one is null terminator ('\0').
/// You only initialise 5 of them, and you let it to chance
/// that the 6th field is initialised to '\0'.
/// To do it properly, declare it as:
char arr[6] = {'h','e','l','l','o','\0'};
/// Or even better:
char arr[] = "hello";
/// Why that is better: because it shows your intention.
/// The first version declares an array, the second a C type
/// string. Do show how you are using your variables! The
/// "hello" literal already contains the '\0' terminator
/// try: cout << sizeof("hello") << endl;
/// it will give 6 (5 characters + '\0' terminator)
// a char pointer looks like a string,
// uses double quotes, and it doesn't
// require us to add null terminator.
char *ptr = " world";
/// though it isn't the same, try the following:
arr[2] = 'u';
ptr[2] = 'u';
/// the first one works, as arr is actually your memory
/// the second doesn't, as you are now trying to modify
/// memory that isn't yours.
/// Apart from that: char* p = "yourText"; is depricated
/// in C++. Do not use it.
// outputs "hello world"
cout << arr << ptr << endl;
/// this only workes by chance, as a modern C++ compiler
/// seems to initialise the 6th field to 0, do not count
/// on all compilers (especially in older standards) to do so.
Have a look at this youtube film about C strings, I hope that makes it somewhat clearer:
https://www.youtube.com/watch?v=VCIMLkej128&index=5&list=PLULj7scb8cHgDLDHcRcJ1osiOORic86wR