C++ 为什么可以将字符串作为字符指针传递

C++ 为什么可以将字符串作为字符指针传递,c++,string,pointers,C++,String,Pointers,我有一部分代码,我不明白它是如何工作的 我有int保存(int\u键,char*文件) 这个方法Save接受字符串作为字符指针Save(i,“log.txt”) 因此,最后发生的事情是在我使用的fopen(文件,“a+”)方法的Save中,它工作得非常好 然而,我不明白它如何接受字符*文件的“log.txt”,“log.txt”不是std:string实际上是一个字符数组,包含{l','o','g','t','x','t','0'},它的类型是常量字符[N]会衰减为const char*因此调用

我有一部分代码,我不明白它是如何工作的

我有
int保存(int\u键,char*文件)
这个方法
Save
接受字符串作为字符指针
Save(i,“log.txt”)

因此,最后发生的事情是在我使用的
fopen(文件,“a+”)
方法的
Save
中,它工作得非常好

然而,我不明白它如何接受
字符*文件
“log.txt”
“log.txt”
不是
std:string
实际上是一个字符数组,包含
{l','o','g','t','x','t','0'}
,它的类型是
常量字符[N]
会衰减为
const char*
因此调用
Save(i,“log.txt”)工作

调用可以工作,但编译器会打印一条警告,指出从
const char*
转换为
char*
在C++03中已被弃用,在C++11中无效。

根据§2.13.5/8,字符串literal
“log.txt”
具有类型
char const[N]

普通字符串文字和UTF-8字符串文字也称为窄字符串文字。窄字符串文字的类型为“array of n const char”,其中n是下面定义的字符串大小,具有静态存储持续时间(3.7)

根据§4.2/1,当作为参数传递时,衰减为指针:

“NT数组”或“T未知界数组”类型的左值或右值可以转换为“指向T的指针”类型的PR值。结果是指向数组第一个元素的指针


<代码>代码> char const */COD>可以被分配给char */COD>和C++中的

< P>,用字符串文字初始化字符指针是完全正确的。 初始化后,我们可以像数组一样使用该字符指针,如下所示:

{
  char *s="abc";
  cout<<s[0];
  cout<<s[1];
}
{
char*s=“abc”;

你使用C编译器吗?@ AZAD我用C++编译程序你能清楚你不懂的东西吗?为什么你认为它不应该被接受?是关于字符串与指针的问题还是关于const指针与非const指针的问题?是代码< char const [n] < /c>还是<代码> conchch[n]
?不记得数组是否有差异(但我相信指针也有差异)@AlejandroDíaz没有区别。如果在
*
之前或之后有
const
,那么区别就在于分别指数值或指针的常量。他的问题是,当函数期望
char*
时,为什么
const char*
不被接受?@Slava可能是这样。我不知道。