类型别名的定义方法
- typedef type name;
- using name=type;
type 表示数据类型,可以是基本数据类型,也可以是复合数据类型
name 表示类型别名(相当于此类型的另外一个名字)
#include <iostream>
using namespace std;
int main()
{
/*定义了一个指向字符的指针类型ptr(基本类型是指针)*/
typedef char* ptr;
using ptr = char*;
/*两种方法任选其一*/
char a = 'h',b='h';
const ptr p1 = &a;//指向字符型的常量指针
const char* p2 = &b;//指向常量的指针
a = a + 1;
b = b + 1;
cout << *p1 << endl;
cout << *p2 << endl;
*p1 = *p1 + 1;//常量指针,可以用它来改变指向的对象的值
//*p2 = *p2 + 1;//指向常量的指针,不可以它来改变指向的对象的值(故此语句错误)
cout << *p1 << endl;
cout << *p2 << endl;
//p1 = &b;//常量指针,其指向的地址不可改变(故此语句错误)
p2 = &a;//指向常量的指针,其指向的地址可以改变
cout << *p1 << endl;
cout << *p2 << endl;
return 0;
}
代码说明
const ptr p1 = &a;//指向字符型的常量指针
const char* p2 = &b;//指向常量的指针
第一条语句中ptr就是基本的数据类型,所以const限定的是指针
第二条语句基本数据类型是char,且const在char之前,所以const限定的是字符
故简单的将ptr理解成char*(即尝试把类型别名替换成它本来的样子)是错误的
常量指针与指向常量的指针的区别
类型 | 作用 |
---|---|
常量指针 | 可以用它来改变指向的对象的值,但它指向的地址不可改变 |
指向常量的指针 | 不可以它来改变指向的对象的值,但它指向的地址可以改变 |