涉及指针、数组、函数指针


几种声明形式
int *a[5];  // a是一个有5个元素的数组,每个元素是整数类型指针(int *)
int *a[] = {0x100, 0x104, 0x108, 0x10c, 0x120}; // 0x100,...,0x10c,0x120表示物理地址

注: 第二条代码,gcc会报waring

int *a[];  //语法错误,需要指定数组长度
int (*a)[];  //  a是一个指针,指向整型数组第1个元素,数组元素个数没有限制
int (*a)[10]; // a是一个指针, 指向整型数组第1个元素
Example:
int a[2] = {1,2};
int b[] = {1,2,3,4};
int (*p1)[];
int (*p2)[2];
表达式 gcc vs2012
p1 = &a pass error C2440: “=”: 无法从“int ()[2]”转换为“int ()[]”
p1 = &b pass error C2440: “=”: 无法从“int ()[4]”转换为“int ()[]”
p2 = &a pass pass
p2 = &b warning: assignment from incompatible pointer type error C2440: “=”: 无法从“int ()[4]”转换为“int ()[2]”

gcc的结果更接近我的理解,原本认为p2=&b是error,最后编译时却只是warning;

vs对类型检查很严格,int ()[]、int ()[2]、int (*)[4]分别是三种不同类型,vs应该有编译参数可以控制类型检查严格程度,我不清楚。

int a[2][3];  // 二维数组
int a[][]; //不允许不完整声明,语法错误
int a[][3]; // 不允许不完整声明,语法错误
int **a; // 指针的指针
int (*a)[3] // a是一维数组的指针,含义等价于int a[][3]
int f();            // f是函数
int (*f)(); // f是函数指针
int (*f[10])(); // f是有10个函数指针的数组,函数返回类型为int,参数为void
int *f(); // f是函数,返回值类型为 int *,参数为void
int *(*f)(); // f是函数指针,函数类型为int *f()
int *(*f[10])(); // f是函数指针数组,数组长度为10,元素类型为int *(*f)()

C语言随记-1的更多相关文章

  1. 递归转手工栈处理的一般式[C语言]

    是任意形式的递归,是化解的一般式. 主题所谓的“递归调用化解为栈处理”,意思是,将递归函数调用化解为“一个由stack_push stack_pop stack_top等函数调用组成的循环式子”.这里 ...

  2. 图灵机(转自wiki)

    图灵机(英语:Turing machine),又称确定型图灵机,是英国数学家艾伦·图灵于1936年提出的一种抽象计算模型,其更抽象的意义为一种数学逻辑机,可以看作等价于任何有限逻辑数学过程的终极强大逻 ...

  3. 什么是NFA(不确定的有穷自动机)和DFA(确定的有穷自动机)

    本节知识点是<编译原理>第三章-词法分析,学习参考教材为清华大学出版社<编译原理>第三版: 前情提要: 字母表∑1和∑2的乘积( product): ∑1∑2 ={ab|a ∈ ...

  4. JavaScript如何诞生

    JavaScript之父谈语言诞生记 发表于2011-06-27 10:30| 9749次阅读| 来源ruanyifeng.com| 0 条评论| 作者阮一峰 prototypeprimitiveja ...

  5. HTML超标记语言

     Html超文本标记语言,负责描绘Web世界的骨架. 〇.工具 http;//www.w3cchool.com.cn 一.Tim Bemers Lee 万维网之父: Html设计者: W3C创始人: ...

  6. 记C语言浮点数运算处理 "坑" 一则

    看一小段C语言程序: int main() { float x = 1.3; x = x - (int)x; ); ; } 在你心目中, 变量 I 是怎样的结果? 如果你理所当然地认为是3的话, 那么 ...

  7. 【实习记】2014-08-19升级vim配置YouCompleteMe并debug的过程+qtcreator有语言包没法换语言

        做了个小项目,有空闲可以做点事了. 偶然查资料看见YouCompleteMe的鼎鼎大名. 演示demo <img src="http://i.imgur.com/0OP4ood ...

  8. 记一次erlang语言bug导致rabbitmq的队列没有消费者的问题

    公司开发和测试环境采用的erlang版本是19.0.3,rabbitmq版本为3.6.10.集群条件下稳定使用了近一年时间,没什么问题. 为了保持和线下一致,线上生产环境采用了相同的版本,运行几个月后 ...

  9. My SQL随记 001 常用名词/结构化语言

    DBMS (Database Management System) 字段/域(列名或者列头 如:姓名身高性别为字段) 姓名 身高 性别 小周周 157 女 记录(一行数据 如:小周周 157 女 ) ...

随机推荐

  1. JAVA内存区域和GC机制

    目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection, ...

  2. (六)《Java编程思想》——初始化及类的加载顺序

    package chapter7; /** * 初始化及类的加载顺序:顺序如下 * 1.基类的static变量 * 2.导出类的static变量 * 3.基类的变量 * 4.基类的构造函数 * 5.导 ...

  3. OD: Memory Attach Technology - Off by One, Virtual Function in C++ & Heap Spray

    Off by One 根据 Halvar Flake 在“Third Generation Exploitation”中的描述,漏洞利用技术依攻击难度从小到大分为三类: . 基础的栈溢出利用,可以利用 ...

  4. 【回顾整理】暴走的SQL语句练习!!!

    设计一个学生成绩数据库,该库包含学生,老师,课程和成绩等信息并完成后面的练习.学生:学号(SNO).姓名(SNAME).性别(SSEX).生日(SBIRTHDAY ).所属班级(SCLASS )课程: ...

  5. easyui datagrid 行数

    $('#gridList').datagrid('getData').rows.length

  6. 10个最实用的Linux命令

    收集了一些对于Linux新手最基本但最有用的Linux命令.你完全可以键入这些命令来管理你的服务器.这些命令对于学习vps或服务器管理的新手最为简便.1.List命令 ls -a //列出所有文件 l ...

  7. [c#]asp.net开发微信公众平台(2)多层架构框架搭建和入口实现

    上篇已经设计出比较完善的数据库了,这篇开始进入代码.  首先把上篇设计的数据库脚本在数据库中执行下,生成数据库,然后在VS中建立项目,为了方便理解和查看,我设计的都是很直白的类名和文件名,没有命名空间 ...

  8. IIC 概述之24c系列存储器内存分析

    IIC 型号     容量      器件/业面寻址字节                   可寻址位       模块 24C01   128B      (1010)(A2)(A1)(A0)(0或 ...

  9. commons-lang使用

    跟java.lang这个包的作用类似,Commons Lang这一组API也是提供一些基础的.通用的操作和处理,如自动生成toString()的结果.自动实现hashCode()和equals()方法 ...

  10. webpack,react,babel

    window搭建webpack,react,babel傻瓜教程   首先现在的webpack教程已经很多了,写这篇的原因是因为自己在从小白开始的搭建过程中,并没有找到比较好的教程,花费了很多的时间,s ...