char * and char[]
char * and char[]
为什么是这样?
#include<iostream>
using namespace std;
int main()
{
char *s="raman";
char *t="rawan";
s=t;
cout<<s;
return 0;
}
但这是错误的?
#include<iostream>
using namespace std;
int main()
{
char s[]="raman";
char t[]="rawan";
s=t;
cout<<s;
return 0;
}
在第一个示例中,s=t
执行指针赋值。在第二种情况下,s=t
试图将指针值(由数组表达式t
的隐式转换或"衰减"产生)赋值给数组对象。c++不允许数组赋值
C和c++恰好在这方面非常相似;c FAQ的第6节很好地介绍了数组和指针之间的关系。
第一个例子将一个指针赋值给另一个有效的指针。
第二个例子将一个数组赋值给另一个数组,这在C &c++。
这个优秀的c++ FAQ条目和这个答案对你来说应该是一个很好的阅读。
除了其他人所说的:
与普遍的看法相反,数组实际上不是指针。它们只是在使用时有很多相似之处,并且有一些隐式转换到指针,这就是为什么很容易像使用指针一样使用它们。
数组是(C和)c++的独立特性。它的行为并不完全像指针。
例如,可以在堆栈上分配数组对象,而使用new(返回指针)和指针分配对象时则不可能。
你展示的例子是另一个:你不能像使用指针一样使用数组。但是你可以使用指针指向一个连续的内存块(数组)。
数组名称为const指针。也就是说,当你声明一个数组时,它的名字是一个指针,不能被改变。
char *s
的意思是:
地址和值都不是常量
const char *s:
value是常量,不是地址。
const char * const s;
地址和值都是常量
char *s[]
是一个数组。数组基址始终是常量。你不能改变它的基址,这在c中是不允许的。
相关文章:
- C++ const char with .begin() and .end()
- 指针混乱char* and int*
- Concatenate char[] and uint32_t in C++
- getline() and char array
- Unicode const char* to JString using JNI and C++
- Char* pointers and char[]
- std::string and const char *
- jni String to *char and java.lang.UnsatisfiedLinkError:
- Evaluate an int, char and int
- RegSetValueEx and CHAR
- While loop and char
- Interchanging const char* and std::string
- Char size and const void*
- While loop and cin char, int
- C++ 连接字符串会导致"invalid operands of types ‘const char*’ and ‘const char"
- const char * and char *
- char * and char[]
- char* and cin in C++
- string and const char* and .c_str()?
- char and String in c++