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可能是这样。我不知道。