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++中的指针.数组指针与指针数组.函数指针与指针函数 本文从刚開始学习的人的角度,深入浅出地具体解释什么是指针.怎样使用指针.怎样定义指针.怎样定义数组指针和函数指针.并给出相应的实例演示.接着,差 ...
随机推荐
- Windows编程之非模态对话框
1 创建非模态对话框 <1> HWNDCreateDialog( HINSTANCE hInstance, // handle to module LPCTSTRlpTemplat ...
- [C++/CLI编程宝典][2]什么是C++/CLI语言
对于什么是C++/CLI,我们首先能够简单的将其名字划分为两部分来理解,第一,C++,我们熟悉的眼下被广泛使用的面向对象的ISO国际标准的高级语言,也称为ISOC++,我们这里以后均称其为ISOC++ ...
- UVA12304 2D Geometry 110 in 1! 计算几何
计算几何: 堆几何模版就能够了. . .. Description Problem E 2D Geometry 110 in 1! This is a collection of 110 (in bi ...
- Js中的onblur和onfocus事件
html页面中,诸如按钮.文本框等可视元素都具有拥有和失去焦点的事件,这些事件在响应鼠标或键盘动作时都可激发预设的操作.本文以文本框获得和失去焦点为例简单讲解onfocus和onblur的应用. 一. ...
- c++构造函数隐式转换--转换构造函数
其实我们已经在C/C++中见到过多次标准类型数据间的转换方式了,这种形式用于在程序中将一种指定的数据转换成另一指定的类型,也即是强制转换,比如:int a = int(1.23),其作用是将1.23转 ...
- cocos2dx-lua牧场小游戏(一)
环境: cocos2dx-3.0rc2, xcode5.0 一.lua项目建立參考 http://blog.csdn.net/daydayup_chf/article/details/249641 ...
- Oracle中decode函数 列变成行
create table t_class(c_Id number(10) primary key ,stuName varchar2(50), --人名c_Name varchar2(50), ...
- WPF动态改变主题颜色
原文:WPF动态改变主题颜色 国内的WPF技术先行者周银辉曾介绍过如何动态改变应用程序的主题样式,今天我们来介绍一种轻量级的改变界面风格的方式--动态改变主题色. 程序允许用户根据自己的喜好来对界面进 ...
- JavaMail学习笔记(七)、帐号激活与忘记密码 实例(zhuan)
一.帐户激活 在很多时候,在某些网站注册一个用户之后,网站会给这个用户注册时填写的email地址发送一封帐户激活邮件,这封邮件的内容就是一个激活帐户的链接和一段简短的文字描述,如果用户没有去邮箱将 ...
- cocos2d-html5游戏图片资源选择
cocos2d-html5游戏图片资源能够选择,单张的图片作为一个精灵或者场景的载入对象.也能够把图片给做成plist文件.通过plist来訪问图片资源.其中优缺点.使用方式在个人的測试其中体现例如以 ...