C语言指针回顾(二)理解指针的类型和指针的值
2017-08-02 15:28
483 查看
指针与引用相比,有很多不同。其一、指针是一个对象,因此允许对指针赋值和拷贝,而且在指针的声明周期内它可以先后指向不同的对象。其二,指针可以不用在定义的时候赋初值,此时,指针拥有一个不确定的值。但是,建议在定义的时候就初始化指针,如果实在不知道指向何处 ,就把它初始化为nullptr或者0。下面说四个问题:指针的类型、指针所指向的类型、指针的值、指针本身所占的内存区。
1、指针的类型
从C语言语法的角度,判断指针的类型,直接把指针的名字去掉,剩下部分就是指针的类型。比如 int * p,指针的类型就是 int *,char ** p 指针的类型就是 char **,再比如,int (*p)[3] ,指针的类型就是 int (*)[3]。
2、指针所指向的类型
从C语言语法的角度,判断指针所指向的类型,把指针名字以及指针左边那个 * 去掉,剩下的部分就是指针指向的类型。比如说 int * p,指针 p 指向的类型是 int 类型。再比如,char ** p,指针 p 指向的类型为 char *.
这里有一点要说一下,很多写的很差的书,总是把“指针的类型”和“指针所指向的类型”两个概念混淆,总让人摸不着头脑,迷迷糊糊。但是,把两者区分开来,非常有必要。
3、指针的值(指针指向的内存区 / 指针指向的地址)
指针的值是一个地址,而不是一般的数值,比如,32位程序里内存地址全部都是32位长。指针所指向的内存区,就是从指针的值所代表的内存区开始,长度为 sizeof (指针指向的类型所占空间,比如char 类型,sizeof就是一个字节) 的一片内存区。举个例子,我说指针的值是 XX,就是说指针指向了以XX 为首地址的一片内存区域。如果说指针指向了某块内存区域,就相当于说了指针的值是这块内存区域的首地址。
这里有点要说明,指针所指向的内存区和指针所指向的类型完全不是一个概念。在定义指针变量的时候,指针所指向的类型就是确定的了,但是,只有给它初始化了的时候,它指向的内存区才是存在的。
指针的值(即地址)应该属于以下四种状态之一:
(1)指向一个对象
(2)指向紧邻对象所占空间的下一个位置
(3)空指针,意味着没有指向任何对象
(4)无效指针,除以上三种情况的其它值。试图拷贝或者引用其它无效指针的值都将引起错误,但是编译器不负责检查。也就是说,编译能通过。
4、指针本身所占的内存区
用 sizeof 输出一下就可以了。
1、指针的类型
从C语言语法的角度,判断指针的类型,直接把指针的名字去掉,剩下部分就是指针的类型。比如 int * p,指针的类型就是 int *,char ** p 指针的类型就是 char **,再比如,int (*p)[3] ,指针的类型就是 int (*)[3]。
2、指针所指向的类型
从C语言语法的角度,判断指针所指向的类型,把指针名字以及指针左边那个 * 去掉,剩下的部分就是指针指向的类型。比如说 int * p,指针 p 指向的类型是 int 类型。再比如,char ** p,指针 p 指向的类型为 char *.
这里有一点要说一下,很多写的很差的书,总是把“指针的类型”和“指针所指向的类型”两个概念混淆,总让人摸不着头脑,迷迷糊糊。但是,把两者区分开来,非常有必要。
3、指针的值(指针指向的内存区 / 指针指向的地址)
指针的值是一个地址,而不是一般的数值,比如,32位程序里内存地址全部都是32位长。指针所指向的内存区,就是从指针的值所代表的内存区开始,长度为 sizeof (指针指向的类型所占空间,比如char 类型,sizeof就是一个字节) 的一片内存区。举个例子,我说指针的值是 XX,就是说指针指向了以XX 为首地址的一片内存区域。如果说指针指向了某块内存区域,就相当于说了指针的值是这块内存区域的首地址。
这里有点要说明,指针所指向的内存区和指针所指向的类型完全不是一个概念。在定义指针变量的时候,指针所指向的类型就是确定的了,但是,只有给它初始化了的时候,它指向的内存区才是存在的。
指针的值(即地址)应该属于以下四种状态之一:
(1)指向一个对象
(2)指向紧邻对象所占空间的下一个位置
(3)空指针,意味着没有指向任何对象
(4)无效指针,除以上三种情况的其它值。试图拷贝或者引用其它无效指针的值都将引起错误,但是编译器不负责检查。也就是说,编译能通过。
4、指针本身所占的内存区
用 sizeof 输出一下就可以了。
相关文章推荐
- C语言指针回顾(一)理解指针和指针指向的内容
- C语言回顾(六、基类型,数组指针,字符串指针,函数指针,文字常量区)——iOS开发基础
- 理解c语言指针很关键的几句话,二维数组与指针类型的分析
- 深入理解C语言指针的奥秘
- 黑马程序员———C语言回顾之复杂数据类型
- C语言指针转换为intptr_t类型
- 深入理解C语言指针的奥秘
- 深入理解C语言指针的奥秘
- 深入理解C语言-----各数据类型大小
- 深入理解C指针之三(指针和结构类型的关系)--By kmalloc
- C语言 字符数组和字符串指针的理解
- 黑马程序员——C语言中指针与其他数据类型的结合使用
- C语言之void类型及void指针
- 1分钟彻底理解C语言指针的概念
- 程序员之--C语言细节13(二维数组和指针,&*a[i][0]的理解,数组1[e]和e[1]非常可能你没见过)
- 【好程序员笔记分享】—— C语言指针的理解
- 从内存和内存的分区的角度来理解数据类型 、变量、指针。
- 深度理解C语言指针的奥秘
- [黑马程序员]C语言指针深入理解
- 指针常量C语言关键字const再理解