指针,常量和类型别名

定义typedef char* cptr,cptr和char *在定义数据时的区别,可由下面两个程序得出。
typedef char * cptr;
void main()
{
char a;
const cptr p = 0;
p = &a;
?
system("pause");
}
上面的程序编译时报错,error C3892: “p”: 不能给常量赋值

void main()
{
char a;
const char * p = 0;
p = &a;

system("pause");
}
这个程序编译成功

通过上面两个程序,我们可以得出:
利用别名定义数据类型时,定义的变量的基本数据类型是该别名的类型,如const cptr p = 0;基本数据类型是cptr,所以P是常量指针。对于const char * p = 0;其基本数据类型是const char,p是指向常量的指针,与const cptr p = 0中p的意义完全不同。

以上知识是在<<C++ Primer>>中看到的,第五版61页

时间: 2024-11-06 21:57:34

指针,常量和类型别名的相关文章

指针、常量和类型别名

今天看了C++Primer的2.5.1的一点小理解. 如果某个类型的别名指代的是复合类型或是常量,那么它用到声明语句里面就会产生意想不到的后果,例如下面的声明语句用到了类型pstring,它实际上是类型char*的别名: typedef char* pstring; const pstring cstr = 0; //cstr是指向char的常量指针 const pstring* ps; //ps是一个指针,指向char的常量指针. 上述两条声明语句的基本数据类型都是const pstring,

类型别名、auto类型说明符和decltype类型说明符初探

类型别名 类型别名顾名思义是某种类型的另一个名字,常用于简化类型,易于理解和使用. 传统方法是使用关键字 typedef .新标准规定使用别名声明(alias declaration)来定义类型别名. using zhengxing = int; 如果某个类型别名指代的是复合类型或常量,那么把它用到声明语句中往往会让人理解出错. typedef char *cstring;//cstring 是 char* 的别名 const cstring cstr = 0;//cstr 是指向 char 的

c++学习笔记2--constexpr,类型别名,auto

---恢复内容开始--- constexpr:修饰常量表达式,约定修饰对象不仅为常量,而且在编译阶段就能得到值. 与const不同的是,constexpr约束的是当事人,就是说,constexpr int *a=1;这样的语句,a指针本身是const,并且右边也足够简单,而const int*a:这样的语句,则约定了a指向对象是const,这是不同点.constexpr直接限定为顶层const. 类型别名:传统的是typedef, typedef double a; a b = 1.1; 类似这

类型别名(直接替换要谨慎!)

1. C++有两种方法可以定义类型别名, (1) 传统的方法是使用关键字typedef typedef double money; typedef money price; //price也是double的别名 (2) C++11新标准规定了一种新的方法,使用别名声明关键字using 例如: #include<iostream> using namespace std; using money = double; //money是double的别名 int main() { money f=3

类型别名,auto,decltype

1.类型别名 类型别名是某种类型的同义词. 1 int main() 2 { 3 typedef char *ps; // ps是类型char*的别名 4 const ps p1 = 0; // p1是指向char的常量指针 5 const ps *p2; // p2是一个指针,它的对象是指向char的常量指针 6 return 0; 7 } 注意:遇到使用了类型别名的声明语句时,人们往往会错误地尝试把类型别名替换成它本来的样子去理解,这种理解方法是错误的:要将类型别名看成是一个基本数据类型去理

指针和引用与及指针常量和常量指针

指针和引用的区别 1.存在空指针,但是不存在空引用. 2.指针可以不初始化,而引用必须初始化,并且,引用的目标一旦确定,后面不能再更改,指针可以更改其指向的目标. 3.指针是一个实体,而引用仅是个别名. 4.引用是类型安全的,而指针不是 (引用比指针多了类型检查. 5.指针和引用的自增(++)运算意义不一样,对引用的操作直接反应到所指向的对象,而不是改变指向:而对指针的操作,会使指针指向下一个对象,而不是改变所指对象的内容. 6.存在指针数组 ,不存在引用数组,不允许使用引用数组,因为引用没有内

常量指针与指针常量的区别(转帖)

三个名词虽然非常绕嘴,不过说的非常准确.用中国话的语义分析就可以很方便地把三个概念区分开. 一) 常量指针. 常量是形容词,指针是名词,以指针为中心的一个偏正结构短语.这样看,常量指针本质是指针,常量修饰它,表示这个指针乃是一个指向常量的指针(变量). 指针指向的对象是常量,那么这个对象不能被更改. 在C/C++中,常量指针是这样声明的: 1)const int *p; 2)int const *p; 常量指针的使用要注意,指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改,也

Swift编程语言学习1.5——类型别名、布尔值、元组

类型别名 类型别名(type aliases)就是给现有类型定义另一个名字.你可以使用typealias关键字来定义类型别名. 当你想要给现有类型起一个更有意义的名字时,类型别名非常有用.假设你正在处理特定长度的外部资源的数据: typealias AudioSample = UInt16 定义了一个类型别名之后,你可以在任何使用原始名的地方使用别名: var maxAmplitudeFound = AudioSample.min // maxAmplitudeFound 现在是 0 本例中,A

常量指针和指针常量的区别

一, 常量指针,顾名思义,就是指向常量的指针,指针指向的内容不能改变,但是地址可以改变; 声明方式: const 类型 *指针常量名=&变量名: 如:const  int k=5,t=8; const int *p=&k; *p = 9; //指向的是常量,不可以赋值 p = &s;  //可以指向其他地址 二, 指针常量,即指针本身是个常量,是指针指向的位置不能改变,但是指向的对象本身是可以改变的. 声明方式: 指针类型 *const 指针名 = &变量名: 如:int