`
BlogDown
  • 浏览: 213453 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

几个复杂指针类型的分析与对比

 
阅读更多
2009年2月10日 22:42 Slyar 发表评论 阅读评论

文章作者:Slyar 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。

上星期某个夜深人静的夜里Slyar小研究了一下C语言中的指针,对于复杂指针类型的分析偶有所得,写出来谨供互相讨论学习。

int p;

p是一个普通的整型变量。

int *p;

1、p与*结合,说明p是一个指针。
2、*p与int结合,说明指针所指向的内容的类型是整型的。

所以p是一个返回整型数据的指针。

int p[5];

1、p与[]结合,说明p是一个数组。
2、p[5]与int结合,说明数组里的元素是整型的。

所以p是一个由整型数据组成的数组。

int *p[5];

1、p与[]结合(因为其优先级比*高),说明p是一个数组。
2、p[5]与*结合,说明数组里的元素是指针类型。
3、*p[5]与int结合, 说明指针所指向的内容的类型是整型的。

所以p是一个由返回整型数据的指针所组成的数组。

int (*p)[5];

1、p与*结合,说明p是一个指针。
2、*p与[]结合,说明指针所指向的内容是一个数组。
3、(*p)[5]与int结合,说明数组里的元素是整型的。

所以p是一个指向由整型数据组成的数组的指针。

int **p;

1、p与*结合,说明p是一个指针。
2、*p与*结合,说明指针所指向的元素是指针。
3、**p与int结合,说明指针所指向的内容的类型是整型的。

所以p是一个指向整型指针的指针。

int p(int);

1、p与()结合,说明p是一个函数。
2、p()与()里的int结合,说明函数有一个int型的参数。
3、p(int)与外面的int结合,说明函数的返回类型是整型。

所以p是一个有一个整型参数且返回类型为整型的函数。

int (*p)(int);

1、p与指针结合,说明p是一个指针。
2、*p与()结合,说明指针指向的是一个函数。
3、(*p)()与()里的int结合,说明函数有一个int型的参数。
4、(*p)(int)与最外层的int结合,说明函数的返回类型是整型。

所以p是一个指向有一个整型参数且返回类型为整型的函数的指针。

int *(*p(int))[5];

1、从p处开始,先与()结合,说明p是一个函数.
2、p()与()里的int结合,说明函数有一个int型的参数。
3、p(int)与外面的*结合,说明函数返回的是一个指针。
4、(*p(int))与[]结合,说明返回的指针指向的是一个数组。
5、(*p(int))[5]与*结合,说明数组里的元素是指针。
6、*(*p(int))[5]与int结合,说明指针所指向的内容的类型是整型的。

所以p是一个参数为一个整数据且返回一个指向由整型指针变量组成的数组的指针变量的函数。

分享到:
评论

相关推荐

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    10.2.4 指针变量几个问题的进一步说明 140 810.3 数组指针和指向数组的指针变量 141 10.3.1 指向数组元素的指针 142 10.3.2 通过指针引用数组元素 143 10.3.3 数组名作函数参数 146 10.3.4 指向多维数组的指针和指针...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    10.2.4 指针变量几个问题的进一步说明 140 810.3 数组指针和指向数组的指针变量 141 10.3.1 指向数组元素的指针 142 10.3.2 通过指针引用数组元素 143 10.3.3 数组名作函数参数 146 10.3.4 指向多维数组的指针和指针...

    代码语法错误分析工具pclint8.0

    它进行程序的全局分析,能识别没有被适当检验的数组下标,报告未被初始化的变量,警告使用空指针,冗余的代码,等等。软件除错是软件项目开发成本和延误的主要因素。PClint能够帮你在程序动态测试之前发现编码错误。...

    传智播客扫地僧视频讲义源码

    20_信息系统框架集成第三方产品案例_几个重要的面向对象思想_传智扫地僧 21_作业 文档和源码 01_上一次课程回顾 02_数组指针语法梳理 03_函数指针语法梳理_传智扫地僧 04_函数指针做函数参数思想剖析_传智扫地僧 05_...

    《你必须知道的495个C语言问题》

    3.18 需要根据条件把一个复杂的表达式赋给两个变量中的一个。可以用下面这样的代码吗?((condition) ? a : b)= complicated_expression; 41  3.19 我有些代码包含这样的表达式。a ? b=c : d 有些编译器可以接受...

    C#微软培训资料

    9.3 面向对象的分析 .105 9.4 面向对象的设计 .107 9.5 小 结 .110 第十章 类 .112 10.1 类 的 声 明 .112 10.2 类 的 成 员 .113 10.3 构造函数和析构函数 .119 10.4 小 结 .122 第十一章 方 法 ....

    C语言入门经典(第4版)--源代码及课后练习答案

    11.5.1 结构与类型定义(typedef)功能 446 11.5.2 使用typedef简化代码 447 11.6 设计程序 448 11.6.1 问题 448 11.6.2 分析 448 11.6.3 解决方案 448 11.7 小结 459 11.8 习题 459 第12章 处理文件 461 ...

    .Net Core中使用ref和SpanT提高程序性能的实现代码

    一、前言 其实说到ref,很多同学对它已经有所了解,ref是C# 7.0的一个语言特性,它为开发人员提供了返回本地变量引用和值引用的机制。 Span也是建立在ref语法基础上的一个复杂的...来看几个例子来说明引用与指针的相同

    你必须知道的495个C语言问题

    3.18 需要根据条件把一个复杂的表达式赋给两个变量中的一个。可以用下面这样的代码吗?((condition)?a:b)=complicated_expression; 3.19 我有些代码包含这样的表达式。a?b=c:d有些编译器可以接受,有些却不能。为...

    计算机二级公共基础知识

    根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。 (1)如果一个非空的数据结构满足下列两个条件: ① 有且只有一个根结点; ② 每一个结点最多有一个前件,...

    关于计算机数据库系统设计方案.doc

    面向对象技术利用对象、类等技术手段可以满足对一些领域数据库的特殊需求,与关 系型数据库相比,面向对象技术的优势主要体现在以下几个方面。 1.1 支持复杂的数据模型。传统的关系型数据库不能支持复杂的数据模型...

    Toad 使用快速入门

    a) 打开存储过程编写器的几个途径: 单击总菜单栏上的第三个按钮:   点击Database - > Procedure Editor , 可以通过Schema browser来调用 b) 一些特点和优点: 1. 强大的自定义设置:从保留字的显示方式...

    C语言FAQ 常见问题列表

    o 4.12 我需要根据条件把一个复杂的表达式赋值给两个变量中的一个。可以用下边这样的代码吗? ((condition) ? a : b) = complicated_expression; * 5. 指针 o 5.1 我想声明一个指针并为它分配一些空间, 但却...

    华为编程开发规范与案例

    与开发人员在测试组环境多次重复以上步骤,发现11群的计次表话单有时正常,有时其出中继群号就为一个随机值,发生异常的频率比较高。为什么其它群的话单正常,唯独11群不正常呢?11群是四个群中最小的群,其中继计...

    window32 API大全 win32编程

    虽然类库和控件使应用程序的开发容易得多,但它们只提供Microsoft Windows的一般功能,对于一些比较复杂和特殊的功能来说,单使用类库和控件是难以实现的,必须直接使用API函数来编写。API函数是构筑整个Windows框架...

    C语言程序设计标准教程

    转义字符以反斜线"\"开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。例如,在前面各例题printf函数的格式串中用到的“\n”就是一个转义字符,其意义是“回车换行”。...

    《数据结构 1800题》

    以上几个都是错误的 6. 下面说法错误的是(C )【南京理工大学 2000 一、2 (1.5分)】 (1)算法原地工作的含义是指不需要任何额外的辅助空间 (2)在相同的规模 n下,复杂度O(n)的算法在时间上总是优于复杂度 O...

Global site tag (gtag.js) - Google Analytics