C指针类型小结
要理解复杂的指针类型其实很简单,一个类型里会出现很多运算符,它们也像普通表达式一样,有优先级。
原则: 从变量名开始,根据运算符优先级结合,一步一步分析.
下面让我们先从简单的类型开始慢慢分析吧:
int p; //这是一个普通的整型变量
int *p; //首先从变量名P 处开始,先与*结合,所以说明P 是一个指针,然后再与int 结合,说明指针所指向 //的内容的类型为int 型.所以P 是一个返回整型数据的指针
int p[3]; //首先从变量名P 处开始,先与[]结合,说明P 是一个数组,然后与int 结合,说明数组里的元素 //是整型的,所以P 是一个由整型数据组成的数组
int *p[3]; //首先从变量名P 处开始, 先与[]结合,因为其优先级比*高,所以P 是一个数组,然后再与*结合,说明 //数组里的元素都是指针类型,然后再与int 结合, //说明指针所指向的内容的类型是整型的,所以 //P 是一个由返回整型数据的指针所组成的数组
int (*p)[3]; //首先从变量名P 处开始, 先与*结合,说明P 是一个指针 //然后再与[]结合(与"()"这步可以忽略,只是为了改变优先级),说明指针所指向的内容是一个 //数组,然后再与int 结合,说明数组里的元素是 //整型的.所以P 是一个指向由整型数据组成的数组的指针
int **p; //首先从P 开始,先与*结合,说是P 是一个指针,然 //后再与*结合,说明指针所指向的元素是指针,然 //后再与int 结合,说明该指针所指向的元素是整 //型数据.由于二级指针以及更高级的指针极少用 //在复杂的类型中,所以后面更复杂的类型我们就 //不考虑多级指针了,最多只考虑一级指针.
int p(int); //从P 处起,先与()结合,说明P 是一个函数,然后进入 //()里分析,说明该函数有一个整型变量的参数 //然后再与外面的int 结合,说明函数的返回值是 //一个整型数据
int (*p)(int); //从变量名P 处开始,先与指针结合,说明P 是一个指针,然后与 //()结合,说明指针指向的是一个函数,然后再与()里的 //int 结合,说明函数有一个int 型的参数,再与最外层的 //int 结合,说明函数的返回类型是整型,所以P 是一个指 //向由一个整型参数且返回类型为整型的函数的指针
理解了这几个类型,其它的类型对我们来说就没那么难理解了.
C指针类型小结的更多相关文章
- C51指针类型和存储区的关系详解
一.存储类型与存储区关系 data ---> 可寻址片内ram bdata ---> 可位寻址的片内ram idata ---> 可寻址片内ram ...
- C++课程上 有关“指针” 的小结
上完了C++的第二节课以后,觉得应该对这个内容进行一个小结,巩固知识点,并对我的心情进行了一个侧面烘托... 开始上课的老师: 正在上课的我: 上去敲代码的我: 过程是这样的: 下来的我: 非常的尴尬 ...
- 对于C语言复杂指针类型的分析
转载自:http://www.slyar.com/blog/complicated-point-type.html int p; p是一个普通的整型变量. int *p; 1.p与*结合,说明p是一个 ...
- C++指针类型识别正确姿势
指针是C和C++中编程最复杂也是最有技巧的部分,但对于新手来说,指针无疑是最致命的,让很多人望而退步.不过很多事情都是从陌生开始,然后渐渐熟悉起来的,就像交朋友一样,得花点时间去培养感情才行.不过指针 ...
- C语言指针类型
1:只要是指针类型,不管是几级指针[带几个*],其宽度都是4字节 2:任何数据类型[包括自己定义的结构体]前面都能加*号,表示该数据类型的一个指针 3:由于是386处理器,其数据处理的宽度都是四个字节 ...
- 《精通C#》自定义类型转化-扩展方法-匿名类型-指针类型(11.3-11.6)
1.类型转化在C#中有很多,常用的是int类型转string等,这些都有微软给我们定义好的,我们需要的时候直接调用就是了,这是值类型中的转化,有时候我们还会需要类类型(包括结构struct)的转化,还 ...
- 编程范式 epesode7,8 stack存放指针类型and heap,register
这一节从后往前写. ____stack and heap ___stack由 汇编语言操控管理,数据先入后出. 栈是存放局部变量,函数调用子函数时,该函数在栈中占用的空间会增大,用于存放子函数的局部变 ...
- Swift中对C语言接口缓存的使用以及数组、字符串转为指针类型的方法
由于Swift编程语言属于上层编程语言,而Swift中由于为了低层的高性能计算接口,所以往往需要C语言中的指针类型,由此,在Swift编程语言刚诞生的时候就有了UnsafePointer与Unsafe ...
- C语言 数组类型与数组指针类型
//数组类型与数组指针类型 #include<stdio.h> #include<stdlib.h> #include<string.h> void main(){ ...
随机推荐
- NHibernate官方文档中文版--只读实体类型(Read-only entities)
重点 NHIbernate处理只读对象的方式可能和你在别处看到的不同.不正确的使用方式可能造成不可预料的结果. 当一个实体是只读的时候: NHIbernate不会对实体的简单属性和单向关联数据检查数据 ...
- 激活office2010出现“Failed to inject memory”错误
使用Office 2010 Toolkit 2.2.3激活office2010的时候,出现Failed to inject memory!错误,原因是前期使用KM激活过office 2010,然后默认 ...
- Java集合之保持compareTo和equals同步
在Java中我们常使用Comparable接口来实现排序,其中compareTo是实现该接口方法.我们知道compareTo返回0表示两个对象相等,返回正数表示大于,返回负数表示小于.同时我们也知道e ...
- python-sdk-demo的打包
1.安装setuptools pip install python-setuptools 2.创建一个简单的包 下载demo https://github.com/cp-m/py-sdk-demo.g ...
- Android--使用XMLPull解析xml
在Android中极力推荐的xmlpull方式解析xml.xmlpull不只能够使用在Android上.相同也适用于javase,但在javase环境下.你须要自己去获取xmlpull所依赖的类库. ...
- 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:3.安装Oracle RAC-3.6.集群管理命令
3.6. 集群管理命令 3.6.1. RAC的启动与关闭 oracle rac默认会开机自启动,如需维护时可使用以下命令: 关闭: crsctl stop cluster 停止本节点集群服务 crsc ...
- Discuz! 6.x/7.x 版本 前台任意代码执行漏洞
一.漏洞原理: 由于php5.3.x版本里php.ini的设置里request_order默认值为GP,导致Discuz! 6.x/7.x 全局变量防御绕过漏洞. include/global.fun ...
- javascript 正则表达式判断只能是中文、英文或者中文加英文
var reglx =/^[\u4e00-\u9fa5a-zA-Z]+$/ 这个是至少有一个中文或者英文 var reglx =/^[\u4e00-\u9fa5a-zA-Z]*$/ 这个是0个以上的中 ...
- 通过案例对SparkStreaming透彻理解三板斧之三
本课将从二方面阐述: 一.解密SparkStreaming Job架构和运行机制 二.解密SparkStreaming容错架构和运行机制 一切不能进行实时流处理的数据都将是无效的数据.在流处理时代,S ...
- websocket 和 socket.io 之间的区别
socket.io封装了websocket,同时包含了其它的连接方式,比如Ajax.原因在于不是所有的浏览器都支持websocket,通过socket.io的封装,你不用关心里面用了什么连接方式.你在 ...