C语言随记-1
涉及指针、数组、函数指针
几种声明形式
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的更多相关文章
- 递归转手工栈处理的一般式[C语言]
是任意形式的递归,是化解的一般式. 主题所谓的“递归调用化解为栈处理”,意思是,将递归函数调用化解为“一个由stack_push stack_pop stack_top等函数调用组成的循环式子”.这里 ...
- 图灵机(转自wiki)
图灵机(英语:Turing machine),又称确定型图灵机,是英国数学家艾伦·图灵于1936年提出的一种抽象计算模型,其更抽象的意义为一种数学逻辑机,可以看作等价于任何有限逻辑数学过程的终极强大逻 ...
- 什么是NFA(不确定的有穷自动机)和DFA(确定的有穷自动机)
本节知识点是<编译原理>第三章-词法分析,学习参考教材为清华大学出版社<编译原理>第三版: 前情提要: 字母表∑1和∑2的乘积( product): ∑1∑2 ={ab|a ∈ ...
- JavaScript如何诞生
JavaScript之父谈语言诞生记 发表于2011-06-27 10:30| 9749次阅读| 来源ruanyifeng.com| 0 条评论| 作者阮一峰 prototypeprimitiveja ...
- HTML超标记语言
Html超文本标记语言,负责描绘Web世界的骨架. 〇.工具 http;//www.w3cchool.com.cn 一.Tim Bemers Lee 万维网之父: Html设计者: W3C创始人: ...
- 记C语言浮点数运算处理 "坑" 一则
看一小段C语言程序: int main() { float x = 1.3; x = x - (int)x; ); ; } 在你心目中, 变量 I 是怎样的结果? 如果你理所当然地认为是3的话, 那么 ...
- 【实习记】2014-08-19升级vim配置YouCompleteMe并debug的过程+qtcreator有语言包没法换语言
做了个小项目,有空闲可以做点事了. 偶然查资料看见YouCompleteMe的鼎鼎大名. 演示demo <img src="http://i.imgur.com/0OP4ood ...
- 记一次erlang语言bug导致rabbitmq的队列没有消费者的问题
公司开发和测试环境采用的erlang版本是19.0.3,rabbitmq版本为3.6.10.集群条件下稳定使用了近一年时间,没什么问题. 为了保持和线下一致,线上生产环境采用了相同的版本,运行几个月后 ...
- My SQL随记 001 常用名词/结构化语言
DBMS (Database Management System) 字段/域(列名或者列头 如:姓名身高性别为字段) 姓名 身高 性别 小周周 157 女 记录(一行数据 如:小周周 157 女 ) ...
随机推荐
- IO-File 文件 目录 基本操作 递归 遍历
创建和删除 //创建文件 File file1 = new File("不存在的文件.txt");//注意,这一步并没有创建文件,只是把磁盘中的文件封装成了一个对象 System. ...
- 小学生之Java中的异常
1.异常try{ //可能出现异常的代码}catch(Exception ex){ }finally{ //释放资源}2.异常的高级应用开闭原则:对修改关闭,对新增开放3.什么是异常?解析:异常是代码 ...
- servlet的含义和作用
servle(Server Applet):全称Java Servlet,未有中文译文.是用Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容.狭义的Servlet是 ...
- arcmap从excel坐标数据生成点shp文件
概述 今天试图在ArcMap中将excel数据转成点文件,在"Display XY Data"的时候,无法选择X,Y字段,很是纳闷,原来Excel中列的格式是文本,导致无法选择.有 ...
- IActiveView 接口 - 浅谈
IActiveView 和 IMap以其 Map, PageLayout之间的关系. 在ArcMap中, PageLayout 和 Map分别对应不同的视图: layout 和data view.在同 ...
- SSH Secure Shell Client连接Linux 命令行显示中文乱码问题 和oracle 查询数据中文乱码问题
一.SSH Secure Shell Client连接Linux 命令行显示中文乱码问题 linux 设置系统语言 修改 /etc/sysconfig/i18n 文件,如 LANG="en_ ...
- [转]XML中必须进行转义的字符
转自:http://jaenson.iteye.com/blog/945469 编写XML代码经常遗漏的常识: XML实体中不允许出现"&","<" ...
- Selinux 禁用
Selinux是对于强制访问控制的实现,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件. 对于新手来说会影响我们的操作.一般情况下是不需要的,所以禁用他,如果需要的情况下,我们可以 ...
- vmware安装Linux时无法打开xpdf
vmware10+redhat9 在装第二张镜像文件时,出现如下提示:无法打开xpdf-2.01-8软件包...... 解决方法: vmware中,虚拟机->设置->硬件->CD/D ...
- HTML&CSS基础学习笔记1.14—有序列表及列表嵌套
我们上篇讲到了无序列表,那么今天就来看看有序列表和他们的组合嵌套使用吧. 有序列表 现在我们要做那堆杂事了,但是发现这么多杂事,先做哪个好呢?于是我们给这堆杂事弄个优先级排序,让我们能够按照顺序做下去 ...