C语言深度剖析:关键字
C语言深度剖析:关键字
- C语言深度剖析:关键字
- 前言
- 定义与声明(补充内容)
- 最宏大的关键字-auto
- 最快的关键字-register
- 关键字static
- 被冤枉的关键字-sizeof
- 整型在内存中的存储
- 原码、反码、补码
- 大小端补充
- 理解变量内容的存储和取出
- 为什么都是补码
- 整型取值范围
- 关于if判断的问题
- bool变量
- bool变量和零值的比较
- float类型数据的比较
- float变量与零值的比较
- 不安全函数问题
- switch语句的小细节
- 三大循环中的细节
- 打破对goto语句的偏见
- void的一些细节
- void*的运算操作
- 关于return的细节
- return怎样将值返回
- const使用的几种场景
- const修饰普通变量
- const修饰数组
- const修饰指针
- const修饰函数
- volatile-最易变的关键字
- struct关键字
- 柔性数组
- union关键字
- enum枚举类型
- typedef关键字
- typedef和#define宏的区别
- 总结
- 数据类型关键字12个
- 控制语句关键字12个
- 存储类型关键字5个
- 其他关键字3个
C语言深度剖析:关键字
前言
本篇内容既是对之前C语言学习的重点复习内容,也是对之前内容的补充,大体内容逻辑参考了《C语言深度解剖》这本书,所以这节内容更像是个对C语言学习的一个重点内容复盘,也就是将C语言重点知识重新串一遍,同时也对之前一些掌握不太好的知识的补充。所以下面几乎都是一个一个的知识点,友情提示:不是很适合零基础的同学。基础不太好的请将C语言的基础内容部分系统进行学习。
主要将C89/C99标准的主要的32个关键字整体上来总结复习一遍就是我们的目的
定义与声明(补充内容)
1.程序运行,需要加载到内存中
2.程序计算,需要使用变量
定义变量的本质:在内存中开辟一块空间,用来保存数据。
变量声明:extern关键字,声明一个变量或函数已经存在,可以改变其作用域。
变量初始化与赋值:
变量的初始化:在为变量开辟空间的同时将数据存放进去
变量的赋值:将数据放入已经开辟好的空间里面
最宏大的关键字-auto
auto这个关键字是只能用来修饰局部变量的,意思就是表示局部变量只能在其所在的代码块内有效,出代码块则销毁。也就是限制了局部变量的生命周期,auto已经是一个非常原始的关键字了,由于现在编译器已经很智能的解决这些了,所以已经不再需要它了。
最快的关键字-register
register:建议将变量放入寄存器中
那么什么样的变量,可以采用register呢?
1.局部的(全局会导致CPU寄存器被长时间占用)
2.不会被写入的(写入就需要写回内存,后续还要读取检测的话,register的意义在哪呢?)
3.高频被读取的(提高效率所在)
4.如果要使用,请不要大量使用,因为寄存器数量有限
关键字static
修饰全局变量:只能在文件内部使用,改变了作用域
修饰局部变量:相当于改变了声明周期
修饰函数:只能在文件内部使用,相当于改变了作用域
被冤枉的关键字-sizeof
首先记住sizeof不是函数,不是函数,不是函数!!!
三种写法:
sizeof(int)
sizeof(a)
sizeof a
sizeof(i++)
内部i不会自增。
整型在内存中的存储
原码、反码、补码
C语言操作符大全
在讲操作符时有详细说明,不再赘述。
大小端补充
数据低位放在低地址处则为小端,口诀小小小。不符合则为大端。
理解变量内容的存储和取出
数据存入时和类型无关,存入二进制即可,取出时才看类型。
为什么都是补码
计算机在存储数据都是二进制,原因:
1.CPU内只集成了加法器,只有补码才能解决减法问题。
2.补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
整型取值范围
记住char类型有符号-128~127,无符号0 ~255(理解怎么计算)。
关于if判断的问题
例如语句:
if(flag==1)
,从正常逻辑上来讲我们通常想的是如果flag==1,则…,但是实际上如果更系统地来描述的话,应该是先计算括号内的表达式逻辑值,然后进行判断。
bool变量
布尔变量,C99中引入的概念,由于我们目前仍主要按C89/C90标准,所以使用并不多,但是不能一口咬死C语言没有bool类型。
_Bool就是一个类型,不过在新增头文件stdbool.h中,被重新用宏写成了bool,为了保证C/C++兼容性 。
bool a=0;sizeof(a);
可以求出布尔变量的大小,理论上来讲表示真假一个字节就可以,但是具体还是取决于编译器。但是还有一个全部大写的BOOL,TRUE,FALSE,
这是在VS中看到的源文件,微软自己搞出的一套定义,不要使用,为了保证代码的可移植性。
bool变量和零值的比较
bool变量与零值的比较有多种方法,例如if(pass==true);if(pass= =0);if(pass= =false);(pass为一个布尔变量),但是这样的写法都不推荐,我们推荐以下两种写法:
if(pass);
if(!pass);
float类型数据的比较
关于浮点型数据存储的细节不再赘述,链接:C进阶:数据在内存中的存储
很多浮点型数据在内存中不能够精确存储,因此一定不能将两个浮点数直接比较,例如
if(a==0.2)
,这是绝对不能正确判断的,正确判断两个浮点数存储的方式是定义一个宏EPS,假设为0.0000001,如果fabs((a-0.2))<EPS
,fabs是一个函数取绝对值,意思就是只要差值在一定范围内则视为相等。下面举一个完整的代码例子:#define EPS 0.00000000001 #include <math.h> #include <float.h> int main() {float a = 3.14f;/*第一种写法*/if (fabs(a - 3.1) > EPS){printf("you can see me!\n");}/*第二种写法*/if ((a - 3.1) > DBL_EPSILON){printf("you can see me!\n");}return 0; }
其中DBL_EPSILON是一个很小的正数,一般用来判断比较浮点数。
float变量与零值的比较
有了上面基础就很好理解了,float变量与零值的比较就相当于:
if(fabs(x-0.0)<DBL_EPSILON)
或if(fabs(x)<DBL_EPSILON)
即可。
不安全函数问题
两种解决方法:
#define _CRT_SECURE_NO_WARNINGS 1//(注意必须要放在头文件之前) #pragma warning(disable: 4996)
switch语句的小细节
case后面的语句中可以多语句但是不可以定义变量,如果一定有需求的话,封装成一个函数。
三大循环中的细节
do while循环(注意最后分号不能省略);for循环;while循环。
三种循环中的break作用一致,都是跳出循环。
重点注意for循环中的continue是跳过本次循环到条件调整处,而在while和do while循环都是continue直接跳到条件判断处。
打破对goto语句的偏见
在市面上几乎所有的书里面都会有不建议使用goto语句,实际上很多公司内部的代码规范也是命令禁止使用goto语句,但是goto语句绝对不仅仅是毫无用处,不推荐使用goto语句仅仅是因为很多实力程度不够的程序员使用会造成逻辑混乱,很容易出错,但是在一些大型工程里面goto语句也是非常重要的一部分。例如:
这是Linux内核中的部分源代码,可以看到其实goto语句是使用非常频繁的,如果你要用工具去数一下数量的话可能达到几十万行。
所以goto语句不是炸弹,仅仅是因为我们的公司当前的业务逻辑并不复杂。
void的一些细节
定义变量的本质:开辟空间
而void作为空类型,理论上是不应该开辟空间的,即使开了空间,也仅仅作为一个占位符看待
所以,既然无法开辟空间,那么也就无法作为正常变量使用,既然无法使用,编译器干脆不让他定义变量。
在vs2013中,sizeof(void)=0
在Linux中,sizeof(void)=1(但编译器依旧理解成,无法定义变量)
所以不要一口咬死sizeof(void)大小一定是0,这个是没有明确标准规定的。
自定义函数的默认返回值是int,函数返回值使用void时也不可以不写返回值,
没有返回值,如果不写void,会让阅读你代码的人产生误解:他是忘了写,还是想默认int?
在函数参数部分不写void的话就是明确指定不能给函数传参数
void*的运算操作
在vs中对void*的变量是不允许的,例如++
int main() {void *p = NULL;p++; //报错p += 1; //报错return 0; }
而在gcc编译器下编译就是能通过的,由于编译器对void的大小认定不一致导致了这样的现象。
Linux 上可用的 C 编译器是 GNU C 编译器,它建立在自由软件基金会的编程许可证的基础上,因此可以自由发布。 GNUC 对标准 C 进行一系列扩展,以增强标准 C 的功能 。
关于return的细节
在使用上:由于函数在栈上开辟空间,在出函数后函数内的临时变量也会释放(并没有销毁数据,而是将数据设置为无效数据,之后使用直接覆盖),不要返回函数内部创建的指针,在后续使用是非法访问。
return怎样将值返回
可以看到,是通过一个寄存器来实现的,所以当我们写函数有返回值但是不return的话,这次函数的返回值依旧在寄存器中,当下次使用时,有可能出现一些意想不到的错误。
const使用的几种场景
const修饰普通变量
变量直接为不可直接修改的值,没什么好说的。
const修饰数组
const arr[]={1,2,3,4,5};
数组中的每一个元素都不可直接被修改。
const修饰指针
只需要看const修饰谁即可。
const修饰函数
const修饰函数参数,函数参数不可直接被修改
const修饰函数返回值,函数返回值不可直接被修改
volatile-最易变的关键字
volatile这个关键字可以说是个非常冷门的关键字,很多人甚至都没有听说过,或者听说过但是也没有用过,今天我就详细来解释一下这个关键字
volatile这个关键字其实作用有些特殊,
总结来说作用是:防止内存被覆盖,保证内存的可见性
我们用下图来理解:
那么这个现象怎么验证呢?
我们可以在linus环境下用gcc编译器详细看到,
验证过程:
gcc test.c -O2 -g //以O2级别进行代码优化 objdump -S -d a.out > a.s //对形成的a.out可执行程序进行优化
const volatile int a = 10;
这句代码看起来怪怪的,但其实是可以编过去的。
const要求你不要进行写入就可以。volatile意思是你读取的时候,每次都要从内存读。两者并不冲突。
虽然volatile就叫做易变关键字,但这里仅仅是描述它修饰的变量可能会变化,要编译器注意,并不是它要求对应变量必须变化!这点要特别注意。
可能有人会疑惑的是我在死循环的过程中变量怎么可能改变呢?
这是因为我们目前写的程序都是单进程,如果有多进程的程序的话,变量的值是有可能改变的。
struct关键字
基本知识不再废话,重要要注意结构体的大小计算问题,结构体内存对齐
注意一个空结构体问题,在VS下是不被允许定义的,但是在Linux中gcc环境下是可以的,计算大小为0
柔性数组
柔性数组在C99中才有,但是大多编译器对C99标准支持并不完全,所以不再过多的赘述,细节请看:
自定义类型:结构体、枚举、联合体
union关键字
需要重点理解的就是联合体在内存中的保存,经典问题:如何用程序确认当前系统的存储模式
还有个位域的问题,但是不太重要,详情见上=链接自定义类型:结构体、枚举、联合体
enum枚举类型
详情见上链接:自定义类型:结构体、枚举、联合体
typedef关键字
1.对一般类型进行重命名
2.对结构体类型进行重命名
3.对指针进行重命名
4.对复杂结构进行重命名(数组类型为例,先不要搞那么复杂
typedef和#define宏的区别
#define定义的宏只是简单的文本替换
而typedef定义了一个全新的变量
对比:
总结
以上就是所有的32个关键字总结,可能关键字并不是详细,但是还是那句话,这节更是对C语言知识的复盘,一个查漏补缺的过程。
数据类型关键字12个
char
:声明字符型变量或函数
short
:声明短整型变量或函数
int
: 声明整型变量或函数
long
:声明长整型变量或函数
signed
:声明有符号类型变量或函数
unsigned
:声明无符号类型变量或函数
float
:声明浮点型变量或函数
double
:声明双精度变量或函数
struct
:声明结构体变量或函数
union
:声明共用体(联合)数据类型
enum
:声明枚举类型
void
:声明函数无返回值或无参数,声明无类型指针
控制语句关键字12个
循环控制(5个)
for
:一种循环语句
do
:循环语句的循环体
while
:循环语句的循环条件
break
:跳出当前循环
continue
:结束当前循环,开始下一轮循环条件语句(3个)
if
: 条件语句
else
:条件语句否定分支
goto
:无条件跳转语句开关语句 (3个)
switch
:用于开关语句
case
:开关语句分支
default
:开关语句中的“其他”分支返回语句(1个)
return
:函数返回语句(可以带参数,也看不带参数)
存储类型关键字5个
存储类型关键字(5个)
auto
:声明自动变量,一般不使用
extern
:声明变量是在其他文件中声明
register
:声明寄存器变量
static
:声明静态变量
typedef
:用以给数据类型取别名(但是该关键字被分到存储关键字分类中,虽然看起来没什么相关性)
注意:存储关键字,不可以同时出现,也就是说,在一个变量定义的时候,只能有一个
例如:
auto static int a
这是绝对错误的
其他关键字3个
其他关键字(3个)
const
:声明只读变量
sizeof
:计算数据类型长度
volatile
:说明变量在程序执行中可被隐含地改变
相关文章:
C语言深度剖析:关键字
C语言深度剖析:关键字C语言深度剖析:关键字前言定义与声明(补充内容)最宏大的关键字-auto最快的关键字-register关键字static被冤枉的关键字-sizeof整型在内存中的存储原码、反码、补码大小端补充理解变量内容的存储和取出为什么都是补码整型取值范围关于…...
聊一聊过度设计!
文章目录什么是过度设计?过度设计的坏处如何避免过度设计充分理解问题本身保持简单小步快跑征求其他人的意见总结新手程序员在做设计时,因为缺乏经验,很容易写出欠设计的代码,但有一些经验的程序员,尤其是在刚学习过设…...
程序员在小公司(没有大牛,人少)怎么成长?
大多数小公司都是创业公司,所以它们有着非常独特的“创业心态”。所谓创业心态通常表现为关注快速增长,竭尽所能让公司盈利,或者达成其他一些迫切目标。 在这样一家公司工作的软件开发人员,你极有可能要身兼多职,不能…...
【Fastdfs实战】在本地如何将文件上传到Linux虚拟机
作者:狮子也疯狂 专栏:《Fastdfs连续剧》 坚持做好每一步,幸运之神自然会驾凌在你的身上 目录一. 🦁 前言二. 🦁 上传原理Ⅰ. 🐇 原理图解Ⅱ. 🐇 传输原理三. 🦁 实战演示Ⅰ. &…...
ERP 系统的应用对企业财务会计信息系统内部控制的影响
(一)对企业的财务信息数据进行实时和动态管理传统的财务会计信息系统一般都是采用单一的软件系统,所以在信息的传递及处理上常常不能满足企业的需要,信息与其他部门存在不对称及滞后的现象。而ERP 系统是通过有效的技术手段将企业的各种分散的数据进行完…...
智慧物联网源码带手机端源码 物联网系统源码
在智慧工厂领域,智慧城市领域,都需要对设备进行监控。比如工厂需要对周围环境温度、湿度、气压、电压,灯的开关进行监控。这时候就需要物联网平台来进行管理。 推荐一个基于java开发的物联网平台,前端HTML带云组态、可接入视频监…...
AI绘画进军三次元,有人用它打造赛博女友?(diffusion)
目录0 写在前面1 AI绘画技术飞跃2 效果展示3 环境配置3.1 下载基础模型3.2 更新.NET和模型3.3 下载绘画模型3.4 启动项目3.5 标签配置4 结语0 写在前面 机器学习强基计划聚焦深度和广度,加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理&a…...
计算机网络高频知识点
目录 一、http状态码 二、浏览器怎么数据缓存 三、强缓存与协商缓存 1、强缓存 2、协商缓存 四、简单请求与复杂请求 五、PUT 请求类型 六、GET请求类型 七、GET 和 POST 的区别 八、跨域 1、什么时候会跨域 2、解决方式 九、计算机网络的七层协议与五层协议分别指…...
谈谈前端性能优化-面试版
前言 当我们去面试的时候,很大概率会被面试官问这么一个问题:你有尝试过对项目做性能优化吗?或者你了解哪些性能优化的方法?听到这个问题的你可能是这样的: 似曾相识但又说不清楚,往往只能零散地说出那么几…...
JAVA连接数据库——JDBC的简单使用
JDBC即Java数据库连接.用来实现Java程序对数据库增删查改。 为了对接Java程序和数据库,java.sql提供了很多api包含在java.sql和javax.sql里面 结构: DriverManager接口: 每一个数据库的驱动程序都必须去到DriverManager注册,生成一个Connection Conn…...
Pandas数据查询
Pandas数据查询 Pandas查询数据的几种方法 df.loc方法,根据行、列的标签值查询 df.iloc方法,根据行、列的数字位置查询 df.where方法 df.query方法 .loc既能查询,又能覆盖写入,强烈推荐! Pandas使用df.loc查询数据…...
NLP-统计词频之处理停用词
前言 本文是该专栏的第1篇,后面会持续分享NLP的各种干货知识,值得关注。 一般来说,自然语言处理(NLP)就是开发能够理解人类语言的应用程序或者应用服务。 举个例子,如Facebook News Feed这种社交网站推送,它的算法知道你的兴趣是自然语言处理,就会推送相关的广告或者…...
sort 定制排序规则(配合functools.cmp_to_key())
sort 定制排序规则(配合functools.cmp_to_key()) 配合例题学习 题目链接:179. 最大数 题目大意:给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。 注意&a…...
【华为OD机试模拟题】用 C++ 实现 - 内存池(2023.Q1)
最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明内存池题目输入输出示例一输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:…...
Python--深入浅出的装饰器--1
本章一起深入浅出一下装饰器。前面我们讲过一章装饰器了。不知道各位看懂了多少。每太看懂也没关系,本章就一起实操一下。简单的例子例1例2上述的两个例子,执行结果为:1423.为什么呢???解析语法糖ÿ…...
如何从0创建Spring Cloud Alibaba(多模块)
以一个父工程带两个Module(test1、test2)为例。 一、创建父工程 由于是模块化项目,那么父工程不需要实际的代码逻辑,因此无需创建src,那么可以有几种方式创建,例如: 使用Spring Initializr脚…...
【华为OD机试模拟题】用 C++ 实现 - 某公司组织招聘(2023.Q1)
最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明招聘 | 某公司组织题目输入输出示例一输入输出说明示例二输入输出说明示例三输入输出说明...
Spring Cloud Sentinel实战(一)- Sentinel介绍
Sentinel介绍 什么是Sentinel 分布式系统的流量防卫兵:随着微服务的普及,服务调用的稳定性变得越来越重要。Sentinel以“流量”为切入点,在流量控制、断路、负载保护等多个领域开展工作,保障服务可靠性。 特点: 1. 2…...
基于SpringBoot的任务管理三种方式
文章目录前言一,异步任务1.1 无返回值异步任务调用1.2 有返回值异步任务调用二、定时任务2.1 背景介绍2.2 todo三、邮箱任务3.1 todo前言 开发 web 应用时,多数应用都具备任务调度功能,常见的任务包括异步任务、定时任务和邮件任务。我们以数…...
【华为OD机试模拟题】用 C++ 实现 - 查找单入口空闲区域(2023.Q1)
最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明查找单入口空闲区域题目输入输出示例一输入输出说明示例二输入输出说明示例三输入输出说明示例...
普乐蛙部队vr训练设备军事训练vr体验馆设备元宇宙VR
案例一 地址:北京某部队 内置设备:乐享光轮、VR单车、暗黑战场、VR影院、游艺设备等 内容:部队增加VR体验设备,一、可以在强训练后,进行放松娱乐,也可以锻炼;二、VR设备可以模拟训练场景来进…...
大数据Hadoop教程-学习笔记05【Apache Hive DML语句与函数使用】
视频教程:哔哩哔哩网站:黑马大数据Hadoop入门视频教程 总时长:14:22:04教程资源: https://pan.baidu.com/s/1WYgyI3KgbzKzFD639lA-_g 提取码: 6666【P001-P017】大数据Hadoop教程-学习笔记01【大数据导论与Linux基础】【17p】【P018-P037】大…...
Unity动画转Three.js动画
一:应用场景 在工作中,由于算法给到的动画文件是Unity的.anim格式动画文件,这个格式不能直接在Web端用Three.js引擎运行。因此需要将.anim格式的动画文件转换为Three.js的AnimationClip动画对象。 二:.ANIM格式与AnimationClip对…...
07_MySQL的单行函数
1. 函数的理解1.1 什么是函数函数在计算机语言的使用中贯穿始终,函数的作用是什么呢?它可以把我们经常使用的代码封装起来,需要的时候直接调用即可。这样既提高了代码效率 ,又提高了可维护性 。在 SQL 中我们也可以使用函数对检索…...
QML 第一个应用程序Window
1.创建QML工程 新建文件或者项目-->选择Qt Quick Application 然后生成了一个默认的Window 2.main.cpp中如何加载的qml文件 QQmlApplicationEngine提供了从单个QML文件加载应用程序的便捷方式。 此类结合了QQmlEngine和QQmlComponent,以提供一种方便的方式加载…...
RedisAI编译安装(一)
1.概述 RedisAI 是一个 Redis 模块,用于执行深度学习/机器学习模型并管理其数据。它的目的是成为模型服务的“主力”,通过为流行的 DL/ML 框架和无与伦比的性能提供开箱即用的支持。RedisAI 遵循数据局部性原则,最大限度地提高计算吞吐量并减…...
换掉 Maven,我就用Gradle,急速编译
相信使用Java的同学都用过Maven,这是一个非常经典好用的项目构建工具。但是如果你经常使用Maven,可能会发现Maven有一些地方用的让人不太舒服: Maven的配置文件是XML格式的,假如你的项目依赖的包比较多,那么XML文件就…...
22.2.26打卡 Codeforces Round #853 (Div. 2)
A题极端考虑, 只要存在一个前缀数组的最大公约数小于等于2, 将其放在数组最前端, 那么保证能够满足题目要求数据范围这么小, 果断暴力Serval and Mochas Array题目描述Mocha likes arrays, and Serval gave her an array consisting of positive integers as a gift.Mocha thin…...
结构体字节对齐、偏移量
复习下struct的大小、成员偏移量offsetof,说下我的理解: 64位下默认对齐数default8原则1:struct中每一个成员变量tmp的对齐数realmin{default,tmp} struct Student {int num;//0char name[8];double score; } stu; 这个结构体stu中&#x…...
全网最全——Java 数据类型
一、数据类型方法论 程序本质上是对数据的处理(逻辑运算),因此任何语言都需先解决如何表征【数据】这个核心概念。数据作为抽象的概念,天然的包含2个方面属性: 类型:类型决定了数据只能和同类型的数据进行…...
wordpress 密码访问/长沙关键词优化费用
目录 VI/VIM编辑器常用操作介绍: 1.VI和VIM是什么 2.一般模式 2.1常用语法 3.编辑模式 3.1常用语法 4.指令模式 4.1基本语法 5.模式转换 6.VI/VIM键盘图 1.VI和VIM是什么 VI 是 Unix 操作系统和类 Unix 操作系统中最通用的文本编辑器。VIM 编辑器是从 VI…...
一个公司完整的组织架构/宁波seo网络推广
#python中的堆排序peapq模块 heapq模块实现了python中的堆排序,并提供了有关方法。让用Python实现排序算法有了简单快捷的方式。 heapq的官方文档和源码:8.4.heapq-Heap queue algorithm 下面通过举例的方式说明heapq的应用方法 ##实现堆排序 Python#! /…...
龙岗网站推广/永久免费制作网页
我这个菜鸟真的弱爆了~~弱爆了~~以前竟然在写着超级垃圾的快速幂,彻底服了自己~~无语~~实在无语 program1(弱智快速幂取模) 图1:猴子爬下去: 图2:猴子很老实滴爬回来 #include<iostream> using namespace std; //求2^N%20…...
福建省人民政府第七办公室/武汉网络推广seo
同步事件1.声明事件//负责传递消息public delegate void MethodCall(string message);public static event MethodCall requestdata; 2.注册事件Page_Load事件中注册事件 requestdata new MethodCall(FormDataGridViewDataTable_requestdata); 3.显式的触发事件private void bu…...
成都网站建设推荐q479185700顶上/app开发需要多少钱
iOS/Android DevCamp:移动开发者大本营 即将来袭 2012-06-18 12:20|54次阅读|来源:CSDN【已有0条评论】发表评论 关键词:iOS/Android,DevCamp|作者:张宁|收藏这篇资讯 每年的WWDC都得到了移动应用开发业界的重点关注,今…...
wordpress可视编辑器/网页制作教程书籍
今天学校放假了,去广州市区玩,见识见识大城市的魅力。 今天就不发代码了,给大家看一下广州市区的样子,好美啊!...