const char *p,char const *p和char *const p区别
这篇博客对const char *p
,char const *p
,char * const p
进行区别
- const char *p;
- char const *p;
- char * const p;
这句话的含义是定义了一个char类型的指针变量p,但是char前面有一个const修饰,所以p所指向的内容为const类型不可修改,但是可以修改指针的指向地址,为其重新赋值。简单说,就是内容不可改,但是地址可改。下面用一个例子说明。
#include<bits/stdc++.h>
using namespace std;
signed main(){
char s[]="hello";
char t[]="world";
const char* p=s;
//错误的
//原因在于指针的内容不能更改,因此下面这句语句是有问题的
//*p=t[0];
//但是可以让指针的地址可以改变
p=t;
//查看指针指向的头一个字符
cout<<*p<<endl;
return 0;
}
- char const *p
注意:这里则const实际上是修饰前面的char类型的,因此和const char * p
是一样的含义,同时用上面的例子来演示。简单说,就是内容不可改,但是地址可改
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e6+100;
signed main(){
char s[]="hello";
char t[]="world";
char const *p=s;
//错误的
//原因在于指针的内容不能更改,因此下面这句语句是有问题的
// *p=t[0];
//但是可以让指针的地址可以改变
p=t;
//查看指针指向的头一个字符
cout<<*p<<endl;
return 0;
}
- char * const p;
解释:声明一个指向字符或字符串的指针常量,即不可以修改p的值,也就是地址无法修改。同样用上面的程序说明。简单说,就是内容可以改,但是地址不可改。
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e6+100;
signed main(){
char s[]="hello";
char t[]="world";
char* const p=s;
//错误的
//但是可以让指针指向的内容进行更改
*p=t[0];
//原因在于指针的地址不能更改,因此下面这句语句是有问题的
//p=t;
//查看指针指向的头一个字符
cout<<*p<<endl;
return 0;
}