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 女 ) ...
随机推荐
- USB 管道 && 端点
管道是对主机和usb设备间通信流的抽象. 管道和usb设备中的端点一一对应,一个usb设备含有多少个端点,其和主机进行通信时就可以使用多少条管道,且端点的类型决定了管道中数据的传输类型. ...
- [Linux命令]tar命令
tar 命令的解释: tar(bsdtar): manipulate archive files First option must be a mode specifier: -c Create -r ...
- 找两个string[ ]里不同的元素
方法 1:string[] strListOne = new string[] {"Type", "Parent Id","Status"} ...
- uva 10125 - Sumsets
题意: 输入n,然后输入n个数字,,要在这n个数字中找出a,b,c,d..满足a,b,c,d是不同元素,并且a + b + c = d...求出最大的d 直接暴力时间复杂度为O(n^4)..会超时.. ...
- Go语言之defer
defer语句被用于预定对一个函数的调用.我们把这类被defer语句调用的函数称为延迟函数.注意,defer语句只能出现在函数或方法的内部. 一条defer语句总是以关键字defer开始.在defer ...
- Request 分别获取具有相同 name 属性表单元素值
html 中是允许多个具有相同name属性的元素的,例如 <div> <input name="txtName" id="txtFirstName&qu ...
- 使用Hammer.js的H5页面开发DOM的一些小说法
前几天,一个小伙伴说叫我帮他写一个移动端上的一个轮播图,个人一般是不接私活的,毕竟平时工作也是单双休,时间也不很多. 可能大部分程序员,多余的时间都是看看新闻,打游戏,或者学习新的知识,缺少运动吧. ...
- 作业:汽车查询--弹窗显示详情,批量删除 php做法(0521)
作业:显示以下界面: 作业要求: 1.查看详细信息,以弹窗的形式显示,使用ajax2.批量删除 一.主页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XH ...
- 在Ajax中将数组转换成字符串(0517-am)
一.如何在Ajax中将数组转换成字符串 1. 主页面; <head> <meta http-equiv="Content-Type" content=" ...
- U盘装系统系列二—-如何设置U盘启动
老毛桃U盘启动制作好之后,如何设置U盘启动呢?我的是华硕的电脑,开机后按F2进入BIOS设置(不同主板可能不一样,比如有的是按向下键或者Del键,可以在网上查下看看),按Tab键选中Boot:按向下键 ...