C指针决心 ------ 指针的概念和元素
本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020
指针在C语言中的地位,不用多说。
指针的概念
指针有四个要素,各自是指针的类型,指针所指向的类型,指针的值或者指针所指向的内存区,还有指针本身所占领的内存区。所以要理解指针。就必需要搞清楚这四个要素。
以下分别来说。
(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]
注意:
指针的类型(即指针本身的类型)和指针所指向的类型是两个不同的概念,依据其识别方法来差别两者。
3. 指针的值
指针的值,也叫做指针所指向的内存地址或内存区。
指针的值是指指针本身存储的值。这个值将被编译器当作一个地址。而不是一个一般的数值,在32位的程序里,全部类型的指针的值都是一个32位整数.。假设是64位系统。则指针的值就是一个64的位整数。
指针所指向的内存区就是从指针的值所代表的那个内存地址開始,长度为sizeof(指针所指向的类型)的一片内存区。
通常我们说一个指针的值是x,则相当于说明了该指针指向了以x为首地址的内存区域。就相当于说该指针的值就是这块内存区域的首地址。
注意:
指针所指向的内存区和指针所指向的类型是两个全然不同的概念。
就拿上面的样例来说。指针所指向的类型已经有了。可是因为指针并未初始化,所以它所指向的内存区是不存在的。
4. 指针本身所占领的内存区
指针本身占了多少内存,能够用sizeof(指针的类型)就能够知道了,在32位系统里,指针本身占了4个字节的长度。
以上就是关于指针的概念及指针的四个要素,这对于理解指针。及对于指针的操作来说至关重要。
C指针决心 ------ 指针的概念和元素的更多相关文章
- C指针决心 ------ 指针表达式
本文是自己学习所做笔记.欢迎转载.但请注明出处:http://blog.csdn.net/jesson20121020 所谓的指针表达式是指一个表达式.其结果是一个指针. 例1. int a,b; ...
- C基础知识(3):指针--概念、数组中指针的递增/递减、指针数组&数组指针、指向指针的指针
指针是一个变量,其值为另一个变量的地址. 所有指针的值的实际数据类型,不管是整型.浮点型.字符型,还是其他的数据类型,都是一样的,都是一个代表内存地址的长的十六进制数. 下面从4个代码例子分别讲述以下 ...
- (C/C++)区别:数组与指针,指针与引用
1.数组跟指针的区别 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建.数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变. 指针可以随时指向任意类型 ...
- 指针的引用(*&)与指针的指针(**)
指针的引用(*&)与指针的指针(**) 在下列函数声明中,为什么要同时使用*和&符号?以及什么场合使用这种声明方式? void func1( MYCLASS *&pBuildi ...
- #运算符、不同的指针类型、数组和指针、指针运算、堆、栈、静态区、只读区、下标VS指针
#运算符:用于在预编译期将宏参数转换为字符串 #define CONVERS(x) #x //注:没用双引号包括. 不同类型的指针占用的内存空间大小相同. 局部变量 定义: a[5]; 打印a[ ...
- C++语言中数组指针和指针数组彻底分析
################################# ## 基本知识 ## ...
- (转)指针的引用(*&)与指针的指针(**)
本文转载而来,转载出处:http://www.cppblog.com/doing5552/archive/2010/09/28/127994.html 在下列函数声明中,为什么要同时使用*和& ...
- 让你不再害怕指针——C指针详解(经典,非常详细)
http://blog.csdn.net/soonfly/article/details/51131141 前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理 ...
- C++中的指针、数组指针与指针数组、函数指针与指针函数
C++中的指针.数组指针与指针数组.函数指针与指针函数 本文从刚開始学习的人的角度,深入浅出地具体解释什么是指针.怎样使用指针.怎样定义指针.怎样定义数组指针和函数指针.并给出相应的实例演示.接着,差 ...
随机推荐
- red hat Linux 使用CentOS yum源更新
red hat linux是商业版软件,没有经过注册是无法使用红帽 yum源更新软件的,使用CentOS源更新操作如下: 1.删除red hat linux 原有的yum 源 rpm -aq | gr ...
- COST CUTTING THE ALAN GREENBERG WAY
AnatBird.com COST CUTTING THE ALAN GREENBERG WAY
- ASP.NET MVC 4高级编程(第4版)
<ASP.NET MVC 4高级编程(第4版)> 基本信息 作者: (美)Jon Galloway Phil Haack Brad Wilson K. Scott All ...
- BlueJ的code pad
Java的REPL BlueJ的code pad实用吗?Java对(Read-Eval-Print Loop)不提供原生支持.这样的"交互式解释器"或"交互式编程环境&q ...
- WebGL自学教程——WebGL演示样例:開始
最终開始WebGL的演示样例了,...... 開始 使用WebGL的步骤,非常easy: 1. 获得WebGL的渲染环境(也叫渲染上下文). 2. 发挥你的想象力,利用<WebGL參考手冊> ...
- wIndows phone 7 解析Html数据
原文:wIndows phone 7 解析Html数据 在我的上一篇文章中我介绍了windows phone 7的gb2312解码, http://www.cnblogs.com/qingci/arc ...
- 使用装饰器模式动态设置Drawable的ColorFilter
使用装饰器模式动态设置Drawable的ColorFilter 欢迎各位关注我的新浪微博:微博 转载请标明出处(kifile的博客) 非常多时候我们都希望Android控件点击的时候,有按下效果,选中 ...
- Socket开发
Socket开发框架之消息的回调处理 伍华聪 2016-03-31 20:16 阅读:152 评论:0 Socket开发框架之数据加密及完整性检查 伍华聪 2016-03-29 22:39 阅 ...
- uva 571 素数的性质
给定 两个杯子,容量分别分Ca,Cb, 要我们用这两个瓶子倒来倒去,得到某个瓶子里装有N的水 而且给的数据保证 Cb > N,且Ca,Cb互质 那么我们肯定可以在容量为Cb的杯子里得到N的水 ...
- Codeforces Round#297 div2
B: 题意:给定一个字符串,然后给定m个数字 对于每个数字ai的含义是,将ai到n-ai+1的字符串给翻转一遍. 要求输出m次翻转之后的字符串. 想法就是判断第i个位置的字符是翻转了奇数次,还是偶数次 ...