C/C++指针知识整理(一)
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.指针的值(指针所指向的内存地址)
指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。说一个指针指向了某块内存区域,则该指针的值就是这块内存区域的首地址。
每遇到一个指针,都应该问问:这个指针的类型是什么?指针指的类型是什么?该指针指向了哪里?
4.指针本身所占据的内存区
指针本身占了多大的内存?你只要用函数sizeof(指针的类型)测一下就知道了。在 32 位平台里,指针本身占据了 4 个字节的长度。
指针本身占据的内存这个概念在判断一个指针表达式(后面会解释)是否是左值时很有用。
5.分析(理解)指针
完全理解一个复杂类型其实也不难,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以:从变量名处起,根据运算符优先级结合,一步一步分析。
int *p; // 一个返回整型数据的指针。P先与*结合,说明P是一个指针;再与int结合,说明指针所指向的内容为int型。
int p[3]; // 一个由整型数据组成的数组。P先与[]结合,说明P是一个数组;与int结合,说明数组里的元素是整型的。
int *p[3]; // 一个由返回整型数据的指针所组成的数组。P先与[]结合,所以P是一个数组;再与*结合,说明数组里的元素是指针类型;与int结合,说明指针所指向的内容类型是整型的。
int (*p)[3]; // 一个指向由整型数据组成的数组的指针。P先与*结合,说明P是一个指针;再与[]结合("()"只是为了改变优先级),说明指针所指向的内容是一个数组;与int结合,说明数组里的元素是整型。
int **p; // P是一个指针(它指向一个指向int数据的指针)。
int p(int); // 一个函数申明。P先与()结合,说明P是一个函数;然后进入()里分析,说明该函数有一个整型变量的参数;然后再与外面的int结合,说明函数的返回值是一个整型数据。
int (*p)(int); // 一个指向有一个整型参数且返回类型为整型的函数的指针。P先与*结合,说明P是一个指针;与()结合,说明指针指向的是一个函数;……
int *(*p(int))[3]; // 一个参数为一个整数且返回一个指向由整型指针变量组成的数组的指针变量的函数。P先与()结合,说明P是一个函数;然后进入()里面,与int结合,说明函数有一个整型变量参数;然后再与外面的*结合,说明函数返回的是一个指针;然后到最外面一层,先与[]结合,说明返回的指针指向的是一个数组,然后再与*结合,说明数组里的元素是指针,再与int结合,说明指针指向的内容是整型数据。
C/C++指针知识整理(一)的更多相关文章
- Linux进程管理知识整理
Linux进程管理知识整理 1.进程有哪些状态?什么是进程的可中断等待状态?进程退出后为什么要等待调度器删除其task_struct结构?进程的退出状态有哪些? TASK_RUNNING(可运行状态) ...
- C++复习15.指针知识
C++复习15.指针知识 4.指针知识 在Tencent 笔试和面试中都考到了 C/C++中的指针知识,因为自己很不喜欢使用指针,所以才开始学习 Java的,但是现在看来还是躲不掉的,所 ...
- C++进阶4.C++知识整理
C++知识整理(多益笔试) 20131012 前言: 还是关于笔试知识的整理,主要是面向对象的知识还有一些常见的语法知识. 1.还是C++内存管理的知识 C++中程序的内存分布如下: 栈:向下增长,可 ...
- MySQL 索引知识整理(创建高性能的索引)
前言: 索引优化应该是对查询性能优化的最有效的手段了.索引能够轻易将查询性能提高几个数量级. // 固态硬盘驱动器有和机械硬盘启动器,有着完全不同的性能特性: 然而即使是固态硬盘,索引的原则依然成立, ...
- js事件(Event)知识整理
事件(Event)知识整理,本文由网上资料整理而来,需要的朋友可以参考下 鼠标事件 鼠标移动到目标元素上的那一刻,首先触发mouseover 之后如果光标继续在元素上移动,则不断触发mousemo ...
- Kali Linux渗透基础知识整理(四):维持访问
Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...
- Kali Linux渗透基础知识整理(二)漏洞扫描
Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...
- wifi基础知识整理
转自 :http://blog.chinaunix.net/uid-9525959-id-3326047.html WIFI基本知识整理 这里对wifi的802.11协议中比较常见的知识做一个基本的总 ...
- 数据库知识整理<一>
关系型数据库知识整理: 一,关系型数据库管理系统简介: 1.1使用数据库的原因: 降低存储数据的冗余度 提高数据的一致性 可以建立数据库所遵循的标准 储存数据可以共享 便于维护数据的完整性 能够实现数 ...
随机推荐
- viewPager使用时加载数据时显示IllegalStateException异常,解决不了。。。。
从newsPager中得到newsDetailTitles标题的详细内容,这是通过构造器传过来的.打印日志78行能打印,45行打印出来共size是12.但是程序出现了异常java.lang.Illeg ...
- OC弱语法
OC是在运行过程中才会检测对象有没有实现相应的方法,所有编译过程只给出警告:可能找不到对应方法: 如果程序在运行过程中出错,就会出现程序闪退: 类方法:类可以直接调用的方法,相当于java中的 ...
- -bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory
刚刚学习SHELL 写了一个简单的例子发生如下错误 -bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory ...
- kafka 使用、介绍
kafka 是一个消息系统, 具体资料可以参考官网: BrokerKafka集群包含一个或多个服务器,这种服务器被称为broker Topic每条发布到Kafka集群的消息都有一个类别,这个类别被称 ...
- QF——iOS中数据持久化的几种方式
数据持久化的几种方式: 一.属性列表文件: .plist文件是种XML文件.数组,字典都可以和它互相转换.数组和字典可以写入本地变成plist文件.也可以读取本地plist文件,生成数组或字典. 读取 ...
- QF——OC数组
OC中的数组: OC中的数组和它的字符串有很多相似之处.也分为可变和不可变. NSArray:不可变数组,一经初始化,便不能再更改: NSMutableArray:可变数组,它其实是继承于NSArra ...
- 判断浏览器 IE 11
var getOs=function() { try { var u = window.navigator.userAgent.toLocaleLowerCase(), msie = /(m ...
- Android ProgressBar实现加载进度条
progressBar Android进度条组件. progressBar的关键属性: android:max="100" 最大显示进度条 andr ...
- nginx的配置说明
#定义Nginx运行的用户和用户组user www www; #nginx进程数,建议设置为等于CPU总核心数.worker_processes 8; #全局错误日志定义类型,[ debug | in ...
- 获取checkbox 的选中状态的id、checkbox的一些操作
var id_array=new Array(); $('input[name="id"]:checked').each(function(){ id_array.push($(t ...