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


几种声明形式
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. HID Boot device.

    整理这篇文章的目的: 客户会有用到遥控器部分(遥控器操作flow:当按下某个键时,MCU会透过UR送command给TP,TP吃到后再透过微软标准的keyboard上报) 要求:在BIOS设定阶段,遥 ...

  2. vim中systemverilog的高亮显示

    vim中systemverilog的高亮显示 Linux中的vim显示systemverilog语法高亮 windows中的gvim显示systemverilog语法高亮 Linux系统 查看打开vi ...

  3. JQuery 获取checkbox被选中的值

    html代码  <ul id="dxbox">                               <li><input type=" ...

  4. Nginx常见502错误

    1.配置错误因为nginx找不到php-fpm了,所以报错,一般是fastcgi_pass后面的路径配置错误了,后面可以是socket或者是ip:port2.资源耗尽lnmp架构在处理php时,ngi ...

  5. DataGrid( 数据表格) 组件[5]

    本节课重点了解 EasyUI 中 DataGrid(数据表格)组件的使用方法,这个组件依赖于Panel(面板).Resizeable(调整大小).LinkButton(按钮).Pageination( ...

  6. C语言学习笔记---谭浩强

    前段时间有机会去面试了一次,真是备受“打击”(其实是启发),总的来说就是让我意识到了学习工具和学习技术的区别.所以最近在看一些数据结构和算法,操作系统,python中的并行编程与异步编程等东西.然而数 ...

  7. (转)C# DateTime格式化大全

    //c datetime 格式化 DateTime dt = DateTime.Now; Label1.Text = dt.ToString();//2005-11-5 13:21:25 Label2 ...

  8. Asp.Net WebAPI 通过HttpContextBase获取请求参数

    WEBAPI中的Request是HttpRequestMessage类型,不能像Web传统那样有querystring和from 方法接收参数,而传统的HttpReqest的基类是HttpReqest ...

  9. 实例讲解MySQL联合查询

    好了终于贴完了MySQL联合查询的内容了,加上上一篇一共2篇,都是我转载的,实例讲解MySQL联合查询.那下面就具体讲讲简单的JOIN的用法了.首先我们假设有2个表A和B,他们的表结构和字段分别为: ...

  10. php 字符编码转换函数 iconv mb_convert_encoding比较

    在使用PHP处理字符串时,我们经常会碰到字符编码转换的问题,你碰到过iconv转换失败吗? 发现问题时,网上搜了搜,才发现iconv原来有bug ,碰到一些生僻字就会无法转换,当然了配置第二个参数时, ...