打印
[应用相关]

指针的四要素

[复制链接]
743|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Richardd|  楼主 | 2018-6-27 22:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
指针是 C/C++ 功能最强大的工具之一,也是最危险的,因为他们允许执行对计算机不友好的操作,比如使用未经初始化的指针来访问内存或者试图释放同一个内存块两次。 本小节主要介绍指针的基本知识。

指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。指针的四要素:指针的类型、指针所指向的类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区。

1.指针的类型
声明指向特定类型的指针,使用格式:
typename * pointername;
例如:
(1)int* ptr;      //指针的类型是 int*
(2)char* ptr;     //指针的类型是 char*
(3)int** ptr;     //指针的类型是 int**
(4)int (*ptr) [3];  //指针的类型是 int(*)[3]
(5)int* (*ptr) [4]; //指针的类型是 int*(*)[4]

2.指针所指向的类型
        当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容的当做什么类型来对待。
例如:
(1)int *ptr;      //指针所指向的类型是 int
(2)char *ptr;     //指针所指向的的类型是 char
(3)int* *ptr;     //指针所指向的的类型是 int*
(4)int (*ptr) [3];  //指针所指向的的类型是 int()[3]
(5)int* (*ptr) [4]; //指针所指向的的类型是 int*()[4]

3.指针的值
指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。
给指针赋值,可以对变量名应用&运算符,来获得被命名的内存的地址, new 运算符返回未命名的内存的地址。
例如:
double * pn;
double * pc;
double bubble = 3.2;
pn = &bubble;   //把bubble的地址赋予pn
pc = new char;  //把新分配的内存(char类型)的地址赋予pc

4.指针本身所占据的内存区
   指针本身占了多大的内存?你只要用使用 sizeof(指针的类型) 测试一下就知道了。在 32 位系统中,所有类型的指针的值都是一个 32 位整数。
沙发
木木guainv| | 2018-6-28 15:25 | 只看该作者
指针的类型(即指针本身的类型)和指针所指向的类型是两个概念。当你对C越来越熟悉时,你会发现,把与指针搅和在一起的"类型"这个概念分成"指针的类型"和"指针所指向的类型"两个概念,是精通指针的关键点之一。

使用特权

评论回复
板凳
木木guainv| | 2018-6-28 15:26 | 只看该作者
指针本身占据的内存这个概念在判断一个指针表达式是否是左值时很有用。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

380

帖子

0

粉丝