博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
让你不再害怕指针(二)
阅读量:6037 次
发布时间:2019-06-20

本文共 1484 字,大约阅读时间需要 4 分钟。

hot3.png

1、细说指针

    指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。
    要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区。让我们分别说明。
先声明几个指针放着做例子:

    例一:
    (1)int*ptr;
    (2)char*ptr;
    (3)int**ptr;
    (4)int(*ptr)[3];
    (5)int*(*ptr)[4];
1.指针的类型
     从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中各个指针的类型:
     (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]

    在指针的算术运算中,指针所指向的类型有很大的作用。
    指针的类型(即指针本身的类型)和指针所指向的类型是两个概念。当你对C 越来越熟悉时,你会发现,把与指针搅和在一起的"类型"这个概念分成"指针的类型"和"指针所指向的类型"两个概念,是精通指针的关键点之一。
我看了不少书,发现有些写得差的书中,就把指针的这两个概念搅在一起了,所以看起书来前后矛盾,越看越糊涂。

3.指针的值----或者叫指针所指向的内存区或地址

    指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。在32 位程序里,所有类型的指针的值都是一个32 位整数,因为32 位程序里内存地址全都是32 位长。指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为si zeof(指针所指向的类型)的一片内存区。以后,我们说一个指针的值是XX,就相当于说该指针指向了以XX 为首地址的一片内存区域;我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。指针所指向的内存区和指针所指向的类型是两个完全不同的概念。在例一中,指针所指向的类型已经有了,但由于指针还未初始化,所以它所指向
的内存区是不存在的,或者说是无意义的。
    以后,每遇到一个指针,都应该问问:这个指针的类型是什么?指针指
的类型是什么?该指针指向了哪里?(重点注意)
4 指针本身所占据的内存区
指针本身占了多大的内存?你只要用函数sizeof(指针的类型)测一下就知道了。在32 位平台里,指针本身占据了4 个字节的长度。
指针本身占据的内存这个概念在判断一个指针表达式(后面会解释)是否是左值时很有用。

转载于:https://my.oschina.net/u/187483/blog/148419

你可能感兴趣的文章
Python 中使用 MongoDB 存储爬虫数据
查看>>
WindowsServer 2008 AD搭建FTP隔离用户
查看>>
lmdb
查看>>
大文件如何传输,大文件的传输方式有哪些?
查看>>
docker的持久化存储和共享存储和网络架构
查看>>
撕掉普通程序员的标签,这才是真正的大数据工程师!
查看>>
Windows下安装Sqlmap过程及遇到的问题
查看>>
BSD常见分支
查看>>
开挂了!这5个Word技巧真的是超级实用,值得收藏!
查看>>
三分钟了解实时流式大数据分析
查看>>
留与后人一段面试的总结
查看>>
Spring基于XML方式配置事务
查看>>
T-MBA学习营 | 寒窗十数载,我们原来并不会学习?
查看>>
log4j.properties模板
查看>>
Linux:信号(上)
查看>>
vmware虚拟化无法迁移虚拟机
查看>>
SQL UPDATE实现多表更新
查看>>
最近有个需求,就是把某个网址跳转到另外一个网址
查看>>
innobackupex 在增量的基础上增量备份
查看>>
Windows Server 2012 R2 DirectAccess功能测试(2)App1服务器安装及配置
查看>>