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使用数据库的原因: 降低存储数据的冗余度 提高数据的一致性 可以建立数据库所遵循的标准 储存数据可以共享 便于维护数据的完整性 能够实现数 ...
随机推荐
- MSSQL查询连接数
SELECT * FROM [Master].[dbo].[SYSPROCESSES] WHERE [DBID] IN ( SELECT [DBID] FROM [Master].[dbo].[SYS ...
- L6 Shell
写出以下shell脚本1 判定一个用参数指定的文件是否为可执行,如果不是,则改为可执行#!/bin/bash if [ -x $1 ]then echo "OK"else echo ...
- Python进阶之函数式编程(把函数作为参数)
什么是函数式编程? 什么是函数式编程? 函数:function 函数式:functional,一种编程范式 函数式编程是一种抽象计算的编程模式 函数≠函数式,比如:计算≠计算机 在计算机当中,计算机硬 ...
- 判断浏览器及设备的打开方式,自动跳转app中
如果安装了APP则自动条状app,如果没安装则自动跳转下载页面 <head> 放在head中加载 <script> function redirect() { var appU ...
- 勉強すべきURL
http://www.atmarkit.co.jp/ait/articles/1403/19/news034_2.html http://webdesignerwork.jp/web/responsi ...
- javascript 中字符串之比较
<script type="text/javascript"> var string1="apple"; var string2="Ban ...
- AndroidManifest.xml配置文件详解
AndroidManifest.xml配置文件对于Android应用开发来说是非常重要的基础知识,本文旨在总结该配置文件中重点的用法,以便日后查阅.下面是一个标准的AndroidManifest.xm ...
- select,poll,epoll之api笔记
参考:http://www.cnblogs.com/Anker/p/3265058.html select /* According to POSIX.1-2001 */ #include <s ...
- str系列---字符串函数
1. strcat extern char *strcat(char *dest,char *src); 把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'. 返回指 ...
- Linux 网络编程基础(4) -- Ping 的C代码实现
1.背景 在进行网络编程的时候,通常使用的协议有TCP协议,UDP协议.这些协议在简历套接字之初需要制定套接字的类型,比如TCP应当设置为 SOCK_STREAM, UDP对应的套接字应当设置为SOC ...