C语言日记① 初识C
概念
c语言是一种计算机语言 也就是人与计算机打交道的语言
在早期,因为计算机使用的二进制 所以早期写代码都是科学家来写的使用对应的功能二进制代码 需要用到手册,所以开发不方便
在后来,人们发明了汇编语言 用于重命名相应的二进制代码,使开发变得方便起来,但是随着代码量的增多,功能越来越臃肿 导致出现了B语言
而c语言正是在B语言基础之上所搭建的高级计算机语言,类似的还有java/c++等
流行的原因
C语言早期出现并不是很成熟 随着使用人数慢慢增加,c语言越来越完善,最后流行了起来,但是有一个问题 每个人或者每个公司都对c语言有过自定义的定制功能,导致在我这里编译的能跑起来的程序,到您那就不行了
国际标准
为了解决这个情况,人们制定一个国家标准
ANSI C -> C89/C90
hello world
这里使用的开发软件是 vs 2019
百度官网下载
安装 c++库即可总共4g
[[vs2019 初始化]]
创建项目
这里命名规则是test_年_月_日_第几个文件
创建一个空的c++项目
新建文件,发现没有以c为后缀的模板
直接新建test.c
输入代码:
//引用头文件 std-标准 io-输入输出流 类似于java的库 .h head 头文件
#include <stdio.h>
//主函数--程序的入口 .c c语言源文件
int main() {
printf("hello world\n");
return 0;
}
按F5运行
控制台输出hello world
vs 2019快捷键
ctrl+/
注解生成 设置
ctrl+k+d
格式化代码
bit与字节与各种类型的关系
八个bit等于一个字节
c语言中的各种类型 与字节大小:
char 2
short 2 意思就是一个short可以占用十六个bit的空间 也就是 2^16-1 65535个数字
int 4
long 8
long long 16
float 4
double 8
主要定义类型还是看需求
地址的解释和输入流的使用
地址为某个对象存放在电脑内存中的独有id,可直接查找到相应的值
//引用头文件 std-标准 io-输入输出流 类似于java的库 .h head 头文件
#include <stdio.h>
//主函数--程序的入口 .c c语言源文件
int main() {
//printf("hello world\n");
//int a = 10;
//printf("%d\n", a+10);
//char c = 'A';
//printf("%c", c);
int num1 = 0;
int num2 = 0;
scanf_s("%d%d", &num1, &num2);
printf("%d", num1 + num2);
return 0;
}
scanf_s(要输入的类型,...要赋值的对象的地址)
作用域与全局变量
与java类似
但是有个全局作用域,全局变量在整个项目中都可以使用
首先在源文件中定义sum.c
int g_num=2021;
再在main中使用
int main() {
extern int g_num;
printf("%d", g_num);
return 0;
}
要使用全局变量,首先变量名要相同,其次 在要使用的变量前面声明extern
跨平台性的兼容
vs平台认为scanf函数并不安全 所以直接推出scanf_s函数,但是其他编译平台没有,这就导致了该程序只能在vs的平台上运行
所以这里只用使用scanf就好了,查看他报的错误,开启配置
_CRT_SECURE_NO_WARNINGS
在文件的最上方输入#define 配置名称 数值
#define _CRT_SECURE_NO_WARNINGS 1
此时使用scanf函数不报错即可运行
一劳永逸
^1b1801
每次创建文件都要加上#define _CRT_SECURE_NO_WARNINGS 1
是不是很恶心
所以有这样种方式可以一劳永逸
打开所在位置
然后打开这个路径
.\VC\VCProjectItems
找到newc++file.cpp
打开修改
保存
此时创建一个新的c时,默认带入该代码
各种常量
字面常量
1,2,3
这种都叫字母常量
常变量
使用const
关键词修饰的的变量叫常变量
常变量不能作为下面举例的方法中使用
标识符常量
常变量不能被修改 不然编译会报错
标识符常量
使用#define 定义的常量叫标识符常量,这种方式定义出来的数值就真的是常量了
使用案例
#define MAX 10
//引用头文件 std-标准 io-输入输出流 类似于java的库 .h head 头文件
#include <stdio.h>
//主函数--程序的入口 .c c语言源文件
int main() {
int arr[MAX] = { 0 };
printf("%d", arr);
return 0;
}
这里注意下,使用define 定义不能加;
不然会报错
枚举
enum
定义 和使用 与java类似
代码:
enum Sex {
MAN,
WOMAN,
SECRET
};
int main() {
printf("%d\n", MAN);//0
printf("%d\n", WOMAN);//1
printf("%d\n", SECRET);//2
enum Sex sex = SECRET;
printf("%d\n", sex);//2
return 0;
}
字符串
在c中
使用双引号括起来的字符就叫字符串
这里使用两种方式生成字符串,同时打印出来
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
char str[] = "abc";
char str2[] = { 'a',
'b',
'c',
//"\0"
};
printf("%s\n", str);//abc
printf("%s\n", str2);//abc 乱码
return 0;
}
为什么会有乱码呢?
调试可以发现 字符串必须以\0 或 0
结尾
此时我们加上,顺便查看字符串长度
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
char str[] = "abc";
char str2[] = { 'a',
'b',
'c',
"\0"
};
//printf("%s\n", str);
//printf("%s\n", str2);
printf("%d\n", strlen(str));
printf("%d\n", strlen(str2));
return 0;
}
发现值相同
转义符
有些字符串想打出他本来的意思,可以使用转义符
\
注释
// c++风格的注释
/*
c语言风格的注释
*/
用处 可以解释翻译你写的代码
函数
定义
返回值类型 方法名(...类型 参数){
return 返回值;
}
作用
简化方法的引用
数组
int a[] = { 1,2,3,4,5,6,7,8,9,1,2,3,4,6,7,8,9,11 };
数组长度获取
int length = sizeof(a) / sizeof(a[0]);
sizeof(a) = 数组长度乘以该数组类型分配的字节
sizeof(a[0])=当前数组的类型的字节
相除得到数组长度
leecode算法题
获取数组中没有重复两次的数据
比如1,2,3,4,5,1,2,3,4 要取到5
c写法
int a[] = { 1,2,3,4,5,6,7,8,9,1,2,3,4,6,7,8,9,11 };
int length = sizeof(a) / sizeof(a[0]);
for (int i = 0; i < length; i++)
{
int count = 0;
for (int j = 0; j < length; j++)
{
if (a[i] == a[j]) {
count++;
}
}
if (count == 1) {
printf("%d\n", a[i]);
}
}
java写法
//1
int[] arr={1,2,3,4,5,6,7,8,9,1,2,3,4,6,7,8,9,11};
List<Integer> countArr=new ArrayList<>();
for (int i : arr) {
if (!countArr.contains(i))
countArr.add(i);
else {
for (int i1 = 0; i1 < countArr.size(); i1++) {
if (countArr.get(i1)==i){
countArr.remove(i1);
}
}
};
}
System.out.println(countArr);
//2
int[] arr={1,2,3,4,5,6,7,8,9,1,2,3,4,6,7,8,9,11};
for (int k : arr) {
int count = 0;
for (int i : arr) {
if (i == k)
count++;
}
if (count == 1) {
System.out.println(k);
}
}
算法优化
这里是最优解
java
int[] arr={1,2,3,4,5,1,2,3,4};
int ret=0;
for (int i : arr) {
//0^任何一个数 等于任何一个数 任何一个数^任何一个数等于0 由此可以判断 ^可以打乱顺序,结果不会变
// 同时可以排除掉有两对的数据 但是这种算法不可找到第二个排除的
ret=ret^i;
}
System.out.println(ret);
转换成c
int arr[] = { 1,2,3,4,5,1,2,3,4 };
int length = sizeof arr / sizeof arr[0];
int ret = 0;
for (int i=0; i < length;i++) {
ret = ret ^ arr[i];
}
printf("%d", ret);
C语言日记① 初识C的更多相关文章
- C语言日记② 初识 C的内存
第一节: 上一个笔记 有趣的恶搞小程序 定时关机 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <str ...
- Day06 (黑客成长日记) 初识函数和返回值的作用
定义函数: 1.初识函数: 我们在学习字符串时,有这样的操作: li = 'tsy be ba bvake ' print(len(li)) 这样可以打印出li的长度,我们利用了python中的len ...
- Java 语言基础 (初识Java语言, 变量和数据类型, 运算符, 流程控制语句, 数组)
初始 Java 语言 Java SE -- Java Platform, Standard Edition 是 Java 平台的基础 Java SE 以前称为 J2SE, 可以编写桌面应用和基于 we ...
- 动态样式语言less初识
资料参考与http://lesscss.cn/ Bootstrap--(less)下载安装配置 http://lesscss.cn Less使用两种方法 (1)在客户端使用LESS--学习 编写 x. ...
- 初识 go 语言:方法,接口及并发
目录 方法,接口及并发 方法 接口 并发 信道 结束语 前言: go语言的第四篇文章,主要讲述go语言中的方法,包括指针,结构体,数组,切片,映射,函数闭包等,每个都提供了示例,可直接运行. 方法,接 ...
- 初识 go 语言:数据类型
目录 数据类型 指针 结构体 数组 切片 切片的方法 映射 函数闭包 结束语 前言: go语言的第三篇文章,主要讲述go语言中的数据类型,包括指针,结构体,数组,切片,映射,函数闭包等,每个都提供了示 ...
- 初识 go 语言:语法
目录 语法 for 循环 if 语句 switch 语句 defer 语句 defer 栈 结束 前言: go语言系列第二篇,主要讲述go语言的语法,如循环,if判断,swich语句,defer语句, ...
- 51单片机C语言学习笔记3: 存储器结构
MCS-51单片机在物理结构上有四个存储空间: 1.片内程序存储器2.片外程序存储器3.片内数据存储器4.片外数据存储器 但在逻辑上,即从用户的角度上,8051单片机有三个存储空间: 1.片内外统一编 ...
- C语言学习之路
c语言学习 初识c语言 c语言数据类型.运算符和表达式(整数浮点数) 字符型数据/字符串 算术运算符和算术表达式(优先级,结合性等) 顺序程序设计(运算符之类内容,字符输入输出等) C/C++ 查看数 ...
随机推荐
- linux————mysql————修改密码
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('输入新密码');
- docker实现mysql主从复制
目录 一.概述 二.创建master主库 三.创建Slave实例 四.主从配置 五.参考 一.概述 1.原理 master服务器将数据的改变记录二进制binlog日志,当master上的数据发生改变时 ...
- Ubuntu中配置tomcat
1.从网上下载的tomcat配置失败后,servername那一栏写不了,必须要删除工作空间的配置文件 sudo rm /home/{username}/workspace/.metadata/.pl ...
- 查询ES6兼容的网站
http://kangax.github.io/compat-table/es6/ 查询es6兼容的网站
- 浅谈C#更改令牌ChangeToken
前言 在上篇文章浅谈C#取消令牌CancellationTokenSource一文中我们讲解了CancellationTokenSource,它的主要功能就是分发一个令牌,当我取消令牌我可以进行一些回 ...
- 快速排序(C++)
快速排序 快速排序是面试中经常问到的排序算法 基本思想:通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小, 则可分别对这两部分记录继续进行排序,以达到整个序 ...
- Docker(42)- 镜像原理之联合文件系统
前言 学习狂神老师的 Docker 系列课程,并总结 镜像是什么 镜像是一种轻量级.可执行的独立软件保,用来打包软件运行环境和基于运行环境开发的软件 他包含运行某个软件所需的所有内容,包括代码.运行时 ...
- EL-ADMIN学习笔记
一,支持接口限流,避免恶意请求导致服务层压力过大 常见的限流功能一般有两个关注点: 1.限流原则,即以什么样的条件对请求进行识别以及放行.常见的作法是给予每个调用API的系统不同的唯一编码,用于监控某 ...
- 苹果ASA广告投放归因的接入
前段时间,苹果终于在大陆区开放了应用商店的竞价广告.毫无疑问又开启了苹果应用导量的新玩法,各大厂商都紧跟脚步吃螃蟹.本篇讲解苹果广告中的归因部分. 苹果广告其实在海外已运行多年,而因为IDFA的政策变 ...
- FastAPI(4)- get 请求 - 路径参数 Path Parameters
什么是路径 假设一个 url 是: http://127.0.0.1:8080/items/abcd 那么路径 path 就是 /items/abcd 路径参数 就是将路径上的某一部分变成参数,可通过 ...