c语言提高篇 第一天
一、听课标准
1、选择法排序
2、会简单封装函数
3、数组做函数参数会退化为一级指针
a、数组做函数参数时,应该吧数组元素个数也传递给函数
b、形参中的数组,编译器把它仿作指针处理,c语言特色
c、实参中的数组,和形参中数组本质不一样
void fun(int a[]);//4字节 main(){ , , };//12字节 fun(a); }
二、数据类型
1、类型的本质:固定内存大小的别名
2、数据类型的作用:编译器预算对象(变量)分配的内存空间大小
int a;//告诉c编译器分配4个字节的内存
3、数据类型可以通过typedef起别名
4、可以通过sizeof()测类型大小
5、void ,无类型
1)、函数参数为空,定义函数时,可以使用void修饰:int fun(void)
2)、函数返回值没有返回值,使用void修饰
3)、不能定义void类型的普通变量:void a;//error,无法确定类型,不同类型分配空间不一样
4)、可以定义void*变量:void *p;//ok,32永远是4字节,64位永远是8字节
5)、数据类型本质:固定内存块大小别名
6)、void *p万能指针,函数返回值,函数参数
malloc(配置内存空间)
相关函数 calloc, free, realloc, brk
表头文件 #include<stdlib.h>
定义函数 void * malloc(size_t size);
函数说明 malloc() 用来配置内存空间,其大小由指定的size决定
返回值 若配置成功则返回一指针,失败则返回NULL
范例 void p = malloc(1024);/* 配置1k的内存 */
三、扩展知识
1)分文件时,头文件防止头文件重复包含
#pragma once
2)让c代码可以在c++编译器编译运行
// __cpluscplus 是编译器提供好的宏,不是自定义的 #ifdef __cpluscplus extern "C"{ #endif //__cpluscplus //函数的声明 #ifdef __cpluscplus } #endif //__cplusplus
四、变量
1、变量的本质;内存空间的别名
2、必须通过数据类型定义变量
3、变量相当于门牌号,内存相当于房间,通过门牌号找到房间,通过变量找到所对应的内存
4、变量的赋值:1)直接 2)间接
int a; a=; ; p=&a;//指针指向谁,就把谁的地址赋值给指针 *p=;//间接赋值
4、重点:没有变量,哪来内存,没有内存,拿来内存首地址
5、变量三要素(名称、大小、作用域),变量的生命周期
五、内存四区(栈区、堆区、全局区、代码区)
1、栈区:系统扥配空间,系统自动回收,函数内部定义的变量,函数参数,函数结束,其内部碧昂量声明周期结束
2、堆区:程序员动态分配空间,有程序员动手释放,没有手动释放,分配的空间一直可用
3、全局变量(全局变量和静态变量,里面有分为初始化区和为初始化区,文字常量区:字符常量):整个程序运行完毕,系统自动回收
4、内存四区模型图(c语言学好指针的关键)
5、a)栈区地址生长方向:地址有上往下递减
b) 堆区地址生长方向:地址由下往上递增
c) 数组buf,buf+1 地址永远递增
六、函数调用模型
1、程序各个函数运行流程(压栈弹栈、入栈出栈、先进后出)
七、指针也是一种数据类型
1、指针变量也是一种变量,也有空间,32位程序大小为4字节
int *p=0x1122;
2、*操作符,*相当于钥匙,通过*可以找到执政所指向的内存区域
; int *p=NULL; p=&a;//指针指向谁,就把谁的地址赋值给指针 *p=;//*放=左边,给内存赋值,写内存 int b=*p;//*放=右边,取内存的值,读内存
c语言提高篇 第一天的更多相关文章
- 嵌入式学习笔记(综合提高篇 第一章) -- 利用串口点亮/关闭LED灯
1 前言 从踏入嵌入式行业到现在已经过去了4年多,参与开发过的产品不少,有交换机.光端机以及光纤收发器,停车场出入缴费系统,二维码扫码枪,智能指纹锁以及数字IC芯片开发等; 涉及产品中中既有 ...
- C语言提高 (1) 第一天 数据类型本质与内存四区
(物联网的分层的概念 b/s c/s 结构 习惯: 在C语言 0 函数执行成功 <0是错误 >1做一些返回值处理 3 课前准备 工作经验,记录 4 数据类型的本质 数据类型的本质是固定大小 ...
- 明解C语言 入门篇 第一章答案
练习1-1 #include <stdio.h> int main() { int a; a = 15; int b; b = 37; int c; c = a - b; printf(& ...
- 明解C语言 中级篇 第一章答案
练习1-1 #include <stdio.h> #include<stdlib.h> int main() { srand(time()); ; printf("您 ...
- java提高篇(二)-----理解java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- java提高篇(二)-----理解java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- (转)java提高篇(二)-----理解java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- Java 学习笔记提高篇
Java笔记(提高篇)整理 主要内容: 面向对象 异常 数组 常用类 集合 IO流 线程 反射 Socket编程 1. 面向对象 1.1包 用来管理Java中的类, 类似文件夹管理文件一样. 因 ...
- Java提高篇之理解java的三大特性——继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
随机推荐
- 深入了解浏览器存储:对比Cookie、LocalStorage、sessionStorage与IndexedDB
摘要: 对比Cookie.LocalStorage.sessionStorage与IndexedDB 作者:浪里行舟 Fundebug经授权转载,版权归原作者所有. 前言 随着移动网络的发展与演化,我 ...
- vmware 开启VM的硬件cpu虚拟化功能
物理机的cpu硬件虚拟化功能,通过开启bios中的设置,而vmware中创建的虚拟机也可以开启该特性,如下. 这样的话,就直接可以基于这些VM安装openstack计算节点.控制节点.网络节点了.
- iOS-----------设置自定义字体
1.将字体加入到项目中 2.在info.plist文件中加入相应信息,这一步实际上实在项目的Info页里面增加Fonts provided by application项,并设置相应的ttf文件进去, ...
- (简单)华为荣耀9i LLD-AL20的Usb调试模式在哪里开启的方法
每当我们使用pc通过数据线连接上安卓手机的时候,如果手机没有开启Usb开发者调试模式,pc则没法成功检测到我们的手机,有时,我们使用的一些功能较好的应用如以前我们使用的一个应用引号精灵,老版本就需要开 ...
- 质量:“PM,你怎么可以放弃我?!”
最近遇到一件有趣的事儿,一位文玩老友为了攒一串多宝,新得几颗高品松石,开心不已与我们分享.闲扯中,他说出了攒多宝的要求: 直径偏差2mm以内 每种品类的珠子都要是高品 品类只能是南红(满色满肉).蜜蜡 ...
- Hibernate从入门到了解
目录 Hibernate的介绍与执行流程 运行流程: Hibernate运行环境搭建 Hibernate的基础示例 持久类的编写 持久类的介绍 几个考虑遵守的规则: 补充: Hibernate核心文件 ...
- 批量删除MSSQL 中主外键约束
转自: http://www.maomao365.com/?p=813 在制作 MSSQL同步工具的时候,发现由于主外键的约束,导致数据同步异常,所有我们需要把 读数据库里面的主外键约束,进行批量删除 ...
- 实战项目中Java heap space错误的解决
部标GPS通讯系统在上线之后,经过不断调试,终于稳定运行一段时间,后来又遇到了Java heap space错误异常!日志如下: 说明系统中有未释放的对象.如何找出这些未释放对象以及监控JVM堆内存, ...
- 浅谈TCP IP协议栈(二)IP地址
上一节大致了解TCP/IP协议栈是个啥东西,依旧是雾里看花的状态,有很多时候学一门新知识时,开头总是很急躁,无从下手,刚学会一点儿,却发现连点皮毛都不算,成就感太低,所以任何时候学习最重要的是要在合适 ...
- Swift JSON字符串和字典以及数组的互转
1.JSONString转换为字典 // JSONString转换为字典 func getDictionaryFromJSONString(jsonString:String) ->NSDict ...