c语言从入门到放弃(初识)
目录
- c语言是什么?
- Hello world
- 定义与声明
- 变量的作用域
- 变量的生命周期
- 常量
- 字符串
c语言是什么?
- C语言是一门面向过程的计算机编程语言,与C++、Java等面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
- C语言描述问题比汇编语言迅速,工作量小、可读性好,易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编语言代码生成的目标程序效率低10%~20%。因此,C语言可以编写系统软件。
- 二十世纪八十年代,美国国家标准局为了避免各开发厂商用的C语言语法产生差异,给C语言制定了一套完整的美国国家标准语法,称为ANSI C。作为C语言最初的标准。 2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。
- 语言编译器普遍存在于各种不同的操作系统中,例如Microsoft Windows, Mac OS X, Linux, Unix等。C语言的设计影响了众多后来的编程语言,例如C++、Objective-C、Java、C#。
Hello world
#include <stdio.h> //包含头文件int main() //主函数
{printf("Hello world\n"); //头文件里面的格式化输出函数return 0; //主函数的返回值
} //出了花括号后代表程序结束
c语言的基本组成结构
- "#include<stdio.h>"预处理命令,预处理阶段将头文件展开并且拷贝到代码里面。
- “int main()”主函数,程序的入口,每个工程(程序)只能有一个主函数!
- "格式化输出函数(printf)"头文件里面的标准输出函数。
详细的函数原型请移步cplusplus.com
定义与声明
数据类型
char 字符数据类型short 短整型int 整形long 长整型long long 更长的整形float 单精度浮点数double 双精度浮点数
每种类型的大小是多少?(sizeof关键字求变量在内存中开辟空间的字节个数)
c语言类型 | 32位系统(字节) | 64位系统(字节) |
---|---|---|
char | 1 | 1 |
short | 2 | 2 |
int | 4 | 4 |
long int | 4 | 4 |
long long int | 8 | 8 |
float | 4 | 4 |
double | 8 | 8 |
类型*(指针) | 4 | 8 |
注:c语言中没有字符串类型,但是有字符串!
什么是变量?
在内存中开辟特定大小(本身的类型决定大小)的空间,用来保存数据。
定义变量
#include <stdio.h>
int main()
{int a = 1; char b = 'b'; double b = 1.0; return 0;
}
定义变量 == 类型 变量名(标识符) = 默认值;
变量的分类
#include <stdio.h>
int a = 0; //定义全局整形变量
int main()
{int b = 10; //定义局部整形变量//下面重复定义一个a会不会出问题?int a = 10; //定义局部整形变量printf("%d\n",n); //%d是十进制(整形)输出return 0;
}
运行结果为:10
总结:
- 主函数外定义的变量是全局变量
- 主函数里定义的变量是局部变量
- 当局部变量和全局变量同名的时候,局部变量优先使用!(就近原则)
为什么要定义变量
- 计算机是为了解决人计算能力不足的问题而诞生的 => 计算就需要数据
CPU进行计算,不是所有的数据都要立马被计算的。
例如:我们吃饭,不是所有的饭菜都要立马被你吃掉。饭要一口一口慢慢的吃,那么你还没有吃到的饭菜,就需要暂时放到盘子里!- 这里的盘子,就如同变量,饭菜如同变量里面的数据。
数据需要暂时被保存起来,等待后续处理。
变量定义的本质
- 程序运行,需要加载到内存中
- 程序计算,需要使用变量
- 定义变量的本质:在内存中开辟一块空间,用来保存数据。
变量声明的本质
举一个例子:
- 你宿舍有八个人,你跟其他七个人都同时喜欢一个女生。
有一天你鼓起勇气去表白,成功了就是定义的意思,定义就是只能定义一次,你只能有一个女朋友。- 之后,你回到宿舍跟其他人一个个的私下说你们喜欢的人已经是我女朋友了,你们不要跟她走的太近。
这就是声明的意思,可以声明很多次!
声明一般指的是函数声明。
变量的作用域
作用域概念:指的是定义的变量在代码内被正常使用的区域(区域一般指的是代码块内)。
- 注:代码块是花括号{}
#include <stdio.h>
int main()
{int a = 10;if(a == 10) {int b = 10;printf("局部变量:a=%d,b=%d\n",a,b); //b只能在if语句代码块内使用} //出了代码块局部变量会被释放(置为无效)printf("a=%d,b=%d\n",a,b); //报错!b未定义,出了代码块无法使用return 0;
}
总结:局部变量只能在本代码块内有效
全局变量
#include <stdio.h>
int a = 10; //全局变量
void test()
{printf("%d\n",a); //任何代码块都能被访问
}
int main()
{test();a = 20;printf("%d\n",a); //在任何代码块被修改也可以使用return 0;
}
#include <stdio.h>
int a = 100; //全局变量
int main()
{int a = 10; //局部变量,与全局变量同名printf("%d\n",a); //输出的是局部变量,也就是局部和全部同名的时候,优先局部return 0;
}
结论
- 整个程序运行期间,都有效,主函数结束才会被释放**
- 全局变量和局部变量同名时,优先使用局部变量(就近原则)
变量的生命周期
生命周期概念:指的是该变量从定义到被释放的时间范围,所谓的释放,指的是曾经开辟的空间”被释放“
- 局部变量:进入代码块,形成局部变量,退出代码块,局部变量被"释放"
- 全局变量:在整个程序运行期间生命周期都有效,退出程序全局变量被"释放"
作用域vs生命周期
- 作用域是在代码块里定义的变量,出了代码块后不可以被使用。
- 而生命周期是进入代码块到退出代码块的时间概念。
二者还是有些相似性的,大家别搞混了哦!
常量
C语言中的常量分为以下以下几种:
关键字 | 说明 |
---|---|
无 | 字面常量 |
const | const修饰的常变量(修饰后还是一个变量,只是不能被修改) |
enum | 枚举类型 |
#include <stdio.h>
//举例
enum Colour
{RED, BLUE,BREAK
};
//括号中的RED,BLUE,BREAK是枚举常量
int main()
{3.14;//字面常量1000;//字面常量const float pai = 3.14f; //const修饰的常量pai = 5.14;//ok?#define MAX 100 //#define的标识符常量 return 0}
字符串
- 字符串概念:字符串是由双引号("")引起来的一串字符称为字符串的字面值。
- 注:字符串的结束标志是 \0 这个转义字符,在计算字符串长度的时候 \0 是结束标志,不算作字符串的内容。
//举例
#include <stdio.h>
//下面代码,打印结果是什么?为什么?(突出'\0'的重要性)
#include <string.h>
int main()
{char arr1[] = "hello world"; //定义字符类型数组,数组里面存放的是"字符串"char arr2[] = {'h', 'e', 'l', 'l', 'o'};char arr3[] = {'h', 'e', 'l', 'l', 'o','\0'};printf("%s\n", arr1);printf("%s\n", arr2);printf("%s\n", arr3);return 0;
}
总结:
- 字符串的结束标志是 \0,用字符表示为’\0’
- 如果在数组中定义的字符类型元素没有‘\0’,则打印时会一直找到‘\0’为止!
- 数组中定义的元素是字符类型变量,结束标志是’\0’
字符串的长度
//举例
#include <stdio.h>
#include <string.h>
int main()
{char arr[] = "hello world"; //定义字符类型数组,数组里面存放的是字符串printf("%d\n", strlen(arr)); //运行结果是11,因为求的是字符串"长度",长度不包含结束符\0printf("%d\n",sizeof(arr));//运行的结果是12,求的是字符数组在内存中开辟空间的大小,包含结束符\0return 0;
}
总结:
- 求字符串长度不包含字符’\0’
- 数组中存储的字符串在内存中开辟空间时包含字符’\0’
c语言从入门到放弃(初识)相关推荐
- php从入门到放弃表情,Lite语言——从入门到放弃(一)
Lite 是我设计开发的一门编程语言,主要关注如何设计更简洁的语法,经过两年改进,现在只需要很少的代码量就可以表达现代编程语言的大部分逻辑,去掉了关键字设计. 目前仍在持续改进中,欢迎到 Github ...
- python从入门到爬虫_python爬虫从入门到放弃(一)之初识爬虫
什么是爬虫? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引. ...
- 明解C语言(入门)——初识C语言
明解C语言(入门)--初识C语言 文章目录 明解C语言(入门)--初识C语言 一.显示计算结果 二.变量 三.输入和显示 一.显示计算结果 1.通过字符序列创建出的程序称为源程序,用来保存源程序的文件 ...
- C语言|从入门到尽量别放弃
一直想学习C语言,但常常因为一些事耽搁.对于几乎不需要使用编程的文科生而言,学习C语言只能靠自身的好奇与热情.遗憾的是,这种热情往往不会持续很久还特别容易受打击.因此,希望通过更新这篇文章,督促自己一 ...
- 从入门到放弃C语言-入门篇(2)
请扫码加公众号,周三周六定时更新 上一篇C语言已经推荐了一些我觉得比较好的C语言书籍,这一篇说说两个问题:如何学习C语言以及学习C语言的意义(我不是老师,所以全是我自己认为的意义(微笑)). 感觉身边 ...
- iOS即时通讯,从入门到“放弃”?
image 前言 本文会用实例的方式,将iOS各种IM的方案都简单的实现一遍.并且提供一些选型.实现细节以及优化的建议. 注:文中的所有的代码示例,在github中都有demo: iOS即时通讯,从入 ...
- iOS即时通讯从入门到“放弃”?
前言 本文会用实例的方式,将iOS各种IM的方案都简单的实现一遍.并且提供一些选型.实现细节以及优化的建议. 注:文中的所有的代码示例,在github中都有demo: iOS即时通讯,从入门到&quo ...
- JavaScript从入门到放弃到精通
JavaScript从入门到放弃 1.什么是JS 是一种流行的脚本语言, Java和JS没有什么关系 1.2环境 1.3调试 运行html 控制台调试 console.log()变量打印输出 断点 2 ...
- 深聊性能测试,从入门到放弃之:性能测试技术栈,看完这篇,保证刷新你对性能测试的认知~~
性能测试技术栈 1.引言 2.性能测试基础 2.1 性能测试理论 2.2 测试开发技能 3.性能监听诊断 3.1 前端监听诊断 3.2 服务器监听诊断 3.2.1 Linux 3.2.2 Window ...
- 入门到放弃node系列之网络模块(二)
为什么80%的码农都做不了架构师?>>> 前言 本文首发[一名打字员] 上一节我们刚刚介绍完node的HTTP和HTTPS模块,相信我们也对nodejs有了更深层次的理解,接下 ...
最新文章
- 认知无线电matlab代码详解,认知无线电频谱感知之功率检测matlab代码.docx
- 谷歌Chrome浏览器添加新技术 可防止广告主追踪用户
- python获取pc微信好友列表_python使用itchat获取微信好友列表
- Intel® Nehalem/Westmere架构/微架构/流水线 (7) - 存储转发增强
- Linux查看、处理文件方法
- DotNetBar2使用实例(引用方法)
- 最新版010editor逆向分析
- allure用例定制参数及报告效果展示
- 老司机通过后视镜辨别车距 完爆倒车影像功能
- 3D Human相关研究:人体、姿态估计、人体重建等
- 高等数学强化6:二重积分
- 7大爱好来提高编程技能
- mac alfred和dash安装配置
- Ubuntu系统环境
- 混合动作空间(Dis_Conti_Hybrid)
- RokcetMq基本概念
- 显示器黑屏故障全解析
- Java实现字符串排序
- 阿里云 oss 同区域不同桶名的文件互传
- windows11 22H2资源管理器开启多标签页