const char *和const char 的区别
时间: 2023-09-18 14:12:47 浏览: 193
const char * 和 const char 的区别在于 const 关键字的位置不同。在 const char * 中,const 关键字修饰的是指针所指向的字符,表示指针所指向的字符是不可修改的。而在 const char 中,const 关键字修饰的是字符本身,表示字符是不可修改的。
举个例子来说明,假设有以下声明:
const char *p = "Hello";
const char c = 'A';
对于指针 p,我们可以修改指针 p 指向的字符,但是不能修改指针 p 的值:
p = "World"; // 合法,修改指针 p 指向的字符
*p = 'B'; // 非法,不能修改指针 p 指向的字符
而对于字符 c,我们不能修改它的值:
c = 'B'; // 非法,不能修改 const char 类型的字符的值
所以,const char * 表示指向常量字符的指针,而 const char 表示常量字符。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
相关问题
no declaration matches 'const char* student::stuname(const char*)' 34 | const char* student::stuname(const char *name)
这个错误信息提示你的 `student` 类中没有匹配 `const char* student::stuname(const char*)` 的声明或定义。这可能是因为:
- 在 `student` 类中没有定义 `stuname` 函数。
- `stuname` 函数的声明和定义与调用它的地方不在同一个作用域。例如,可能在头文件中声明了一个函数,在源文件中却没有提供实现。
- `stuname` 函数的参数列表与调用它的地方不匹配。检查一下函数声明和定义中的参数列表是否一致。
- 如果你是在使用继承的情况下出现了该错误,那么可能是因为派生类没有正确地覆盖基类中的 `stuname` 函数。
你需要检查一下以上情况,找到导致这个错误的原因,并进行相应的修改。
note: expected ‘const char *’ but argument is of type ‘char’ char *mystrstr(const char* s1,const char* s2)
这个错误是因为在`main`函数中,您将`char`类型的字符串传递给了`mystrstr`函数,而`mystrstr`函数期望接收的是`const char*`类型的字符串。
为了解决这个问题,您需要将`s2`和`s3`声明为`const char*`类型的指针,而不是`char`类型的数组。
请将以下代码:
```c
char s2[] = "helloworld";
char s3[] = "ow";
```
改为:
```c
const char* s2 = "helloworld";
const char* s3 = "ow";
```
这样就能够解决这个问题。修正后的代码如下:
```c
#include<stdio.h>
#include<string.h>
char *mystrstr(const char* s1, const char* s2)
{
int i = 0, a = 0, c = 0;
int d = strlen(s2);
while (s1[i] != '\0' && a <= d - 1)
{
c = i;
while (s1[i] == s2[a])
{
i++;
a++;
}
if (s2[a] == '\0')
{
return (char*)(s1 + c);
}
i = c;
i++;
}
return NULL;
}
int main()
{
const char* s2 = "helloworld";
const char* s3 = "ow";
printf("%s\n", mystrstr(s2, s3));
return 0;
}
```
现在代码应该能够正确编译和运行了。
阅读全文