c学习之初识c

  • 计算机语言的发展 
  • 什么是C语言    
  • C的常见编译器
  • 初识VS
  • 什么是数据类型
  • 变量和数据类型
  • 变量的种类 
  • 初识常量
  • 初识字符串
  • 简介转义字符
  • 注释的作用
  • 选择语句和循环语句
  • 初识函数和数组
  • 各种各样的操作符
  • 常见关键字
  • 初识指针
  • 初见结构体

 

计算机语言发展 

最早计算机使用二进制指令(1101110)符合电子元件的特性,而后为了方便开始使用助记符 例如1001为ADD ➡️这就是汇编语言 随着发展B语言 C语言逐渐出现。以C语言为首的高级语言出现,C++,Java。python 目前已知的语言就有上千种

什么是C语言

C语言作为最早的高级语言,C/C++仍是现在大部分程序员的选择 经典永不过时 。 不过出现各种版本的C  为了跨平台性 由ANSi制定的 ANSI C 来统一C的标准,如今C已经有着C89 C90 C98 C99 C11 这些版本 其中C90C98最为广泛使用,C常用来底层开发,操作系统,底层框架的设计,电脑(硬件)需要操作系统(win/mac/linux)中间有驱动层  这些就是所谓的底层开发

C的常见编译器

Clang,GCC,MSVC 其中GCC在Linux学习中会使用  VS是集这些编译器之成,有插件

初识VS

现在你安装好了VS,开始创建文件开心写代码, 一看有.c .h 等等各种各样的文件后缀,不知道选哪一个,其实 .c是c语言的源文件 .cpp则是c++的源文件 而c++是可以兼容c的  .h为头文件一般用于声明

介绍些平常常用的快捷键

ctrl+F5 可以编译+链接+运行

ctrl+k+c 注释

ctrl+k+u 取消注释

F10  调试 (部分机型 fn+F10)

什么是数据类型 

我们写代码是为了解决生活中问题,其中有很多各种各样的数字 整数 小数 所以需要数据类型来分类 在C中我们有这几种数据类型

char 字符型  1 

short 短整型  2

int 整型        4

long 长整型  4

long long 长整型  8

float 单精度浮点型   4

double 双精度浮点型  8

其中他们的单位都是 字节 byte

——————————————

简单介绍下 内存单位

bit (最小) byte  KB  MB  GB  TB PB

1byte=8 bit

1KB=1024 byte

1MB=1024 KB

1GB= 1024MB

1TP= 1204GB  

——————————-————

double和float的区别

double精度更高 在编译器中如果直接写55.6 编译器为默认为double类型

所以如果需要设置为float类型 则可以这样写55.6f

变量和数据类型 

那如何使用数据类型呢 我们还需要变量 生活中有很多会变的量 年龄身高体重 还有不会变的量 性别等等 所以就有变量和常量的出现

如何定义变量 就需要用到数据类型 

int age = 20;

float weight = 55.6 ;//其中 float为数据类型 weight为变量名

变量的名字 即变量名不是随便设置的 不能是关键字 长度适宜 且最好有实际意义

可以参考《高质量C/C++编程指南》

 变量的种类 

由作用域和生命周期来划分 变量有局部变量和全局变量两种种类

int b = 20 ; //全局变量
int main()
{
    int a = 10; //局部变量
    
    return 0;
}

局部变量只能活动在相对的大括号中 出去即销毁 而全局变量则可以活动于整个程序甚至整个项目(被另一个文件所使用)

extern int g_val;
其中extern 为关键字 用来声明外部符号的;
跨文件使用

这有一点需要注意 全局变量和局部变量是允许取相同的变量名的,这种行为是可行但不提倡的

#include<stdio.h>
int num = 10 ;
int main()
{
    int num = 1 ;
    printf("num=%d\n",num);


    return 0;

}


output:

num = 1;     // 局部变量的优先级更高

初识常量 

 常量粗略划分有四种 字面常量 ;const修饰的常变量 ;#define 定义的标识符常量 ;枚举常量;

1. 字面常量

int main()
{
    100; // 字面常量
    3.14;//
    ‘a’;
    "abcdef";
    return 0 ;
}

2.const修饰的常变量

const为关键字 可赋予变量不可修改的常量特性 则称为 常变量

int main()
{
    int num = 10;
    const int num = 20;
        //num仍是变量 在 arr[num]中不适用;
    return 0;
}

const 关键字 const修饰谁,谁则不能修改

const char* const name = “Chen”;

const*p ;p值不变

*const p ; p地址不变

const*const p ;则p的值和地址皆不可修改 老const了

3. #define 定义的标识符常量

#define MAX 100  // MAX == 100

MAX = 20 ;//error

 为预处理指令

4.枚举常量 

枚举 意为一一列举 在生活中有许多数据可以列举如性别(男,女,保密);血型;三原色

C提供枚举关键字 enum 

enum Sex
{
MALE, // 枚举常量都赋有值 0
FEMALE, // 1
SECRET // 2
};
int main()
{
    enum Sex s = MALE ;
    return 0;

}

 初识字符串

在“hello world”这条字符串中,隐藏一个\0 这个字符串的结束符,

举个例子:

char arr1[ ] = "abc"; // 包含\0

cahr arr2 [ ] = { 'a' ,'b','c' }; // 没有\0

strlen(); 库函数 专门求字符串长度的函数 string length

#include<string.h>

strlen(arr1)== 3   // \0不计入字符串长度计算中

而strlen(arr2)== 随机值 // 他要等到\0的出现才会结束 由此可见\0的重要性

 简介转义字符

介绍完\0 这有个特别神奇的现象 我们来看看

int main()
{
    printf("c:\test\test.c");
   return 0;
}


Output

//我们认为是的
c:\test\test.c
//实际出现的
c:    est    est.c

 ???怎么会这样 究竟是什么 导致了输出结果和我们预期的不同

这里就要介绍到转义字符,部分字符 如 0 t a b 等等 ,在" \"的作用下 转义 有着别的作用;

 原来 \t 是一个跳TAB位置的意思啊 除此之外还有别的有意思的转义字符

\ddd  ddd为1-3个八进制数  如果用%c输出 可通过ASCII码值 表达

如\130 = X

\xdd   xdd为2个十六进制数 

如\x40 = @

strlen("c:\test\628\test:c");

// 考考大家 这里的strlen会输出多少

 注释的作用

注释即解释性文字 (解释如何实现 解释为什么写这段)

// 这种是C++注释风格

/* */ 这种是C的注释风格 不支持嵌套 

小插曲下

%d - 打印整数

%s - 打印字符串

%c - 打印字符

选择语句和循环语句 

选择语句 

if()          

{

}

else

{

}

这是最简单的选择语句 还有很多种 if elseif else ; switch语句等等

选择语句可以通过判断条件来执行A或B

这篇文章为简单介绍 故不深入介绍

循坏语句

while

for

do while

循坏语句可以通过判断条件来判断何时结束循环

这篇文章为简单介绍 故不深入介绍

初识函数和数组

函数 非数学意义上的函数 而是一种“子程序”,如何理解呢?

举个例子

原材料 ➡️  工厂 ➡️  产品

而这里的工厂就是函数

函数大致分为两类 “库函数” 和  “自定义函数

库函数是由编译器提供的 已经写好的函数 只需引头文件 使用即可

而库函数远远不够满足我们的需要 于是 自定义函数出现 由程序员自行设计的函数

一个函数必须有这

(返回类型)函数名 (变量名);

int Add (int a, int b)  // a,b 是形参
{
    int c;
    c = a + b;
 
}
int main()
{
    int Add (x , y); // x,y 是实参
    return 0;
}

数组   一组数(一组相同类型元素的集合) 

数组定义 int arr[10];  char ch [5] ; int count [26];

初始化     int arr[10] = {1,2,3,4,5,6,7,8,9,10}; 

不完全初始化

 int arr[10] = {1,2,3}; 

 int arr[  ] = {1,2,3}; 

int arr [ 10] ; //这种不初始化的 内容则是随机值

int main()
{
int arr [10] = {1,2,3,4,5,6,7,8,9,10};
while(i<9)
{
printf("%d",arr[i]);
i++;
}
}
//数组的打印

C99里出现了一种 柔性数组 概念

int main()
{
int n = 10;
int arr [n];//变长数组 柔性数组


return 0;
}

允许数组在创建的时候 数组大小用变量指定 但这种数组不允许初始化) 

****数组的下标*****易错点

arr[ 2 ] ➡️ arr [ 0 ]+ arr [ 1 ]

从0开始 千万记住

arr [ 3 ] = { 1,2,3};  arr [ 3] = 3 ; //这种错误的🙅 arr [2] = 3;这个才对 

各种各样的操作符

算术操作符

+ - * / % (在/除法运算中,如果想得到小数结果,必须保证除数/被除数至少有一个小数

5/2 == 1  5.0/2 == 2.5 )

移位操作符

<<. >>

位操作符

& | ^

&按位与 即两个同时为1,才为1

 1,0➡️0    0,0➡️0 

 0,1➡️0    1,1➡️1

|按位或 即两个同时为0,才为0

 0,0➡️0    1,0➡️1 

 0,1➡️1    1,1➡️1

^ 按位异或 即两个相同,为0,相异为1

 0,0➡️1    1,0➡️0

 0,1➡️0    1,1➡️1

赋值操作符

=        +=    -=      *=

/=         &=           ^=

|=         >>=       <<=

这有个很有意思的题目和 ^ 按位异或有关 和大家分享下

问题:在不创建临时变量的(第三个变量)的前提下,实现两个数的交换

int main()
{
int a = 3;
int b = 5;
int tmp = a;
a = b;
b = tmp;//这是我们平常的做法
//如何实现没有第三个变量还能实现呢
*************************
int a = 3;
int b = 5;
a = a + b ; //此时a == 8
b = a - b ; // b == 3
a = a - b ; // a == 5  铛铛铛,实现了
//不过这种方法有缺陷 如果a+b的数值大于数据类型 int之类 则行不通 
//所以出现了这种极其巧妙的方法
//首先我们来看看这个
0^3 == 3; //0^任何数==任何数
3^3 == 0; // 任何数^自身 == 0


int a = 3;
int b = 5;
a = a^b;
b = a^b;// b = a^b^b ; b = a;
a = a^b; // a = a^b^a ; a = b;
//是不是很神奇
//我们可以把他们对应成 私钥和公钥 有点味了

return 0;
}

常见关键字

auto 自动 自动创建且自动销毁
break 停止 
case  switch语句中会用到
const 修饰指针/变量 使其具有常量的特性
continue 继续 
else 和if 一起使用
default 默认
extern 声明外部符号
enum 枚举
goto 坏东西
register 寄存器
return 返回值
signed 有符号
unsigned 无符号
static  静态 增强其生命周期
struct 结构体
union 联合体
typedef 类型重定义
void 无返回类型
volatile 高段位会用到的

初识指针

我们将内存 划分成一个个小的内存单元 每个内存单元的大小是1个字节

有点像这样的感觉👇

0x00045128               

0x000451270x0004512A

而每个内存单元我们还赋予了编号 即地址;

而内存单元的编号 地址 也就是我们 所称的(指针)!!!

题外话

%p -- 。印地址 显示十六进制

%d -- 打印整型

%c -- 打印字符

%s -- 打印字符串

初见结构体

在现实生活中许多对象 是复杂的 没法用单一类型来表示的

所以我们会使用结构体!!!

struct Stu //我们创造一个结构体来描述“学生”这个对象
{
    char name[];
    int age;
    char sex [5];
    char id [] ;

};
int main()
{
    struct Stu s; //上面相当于图纸 这个s就是图纸的实体化

    return 0;
}

 写在最后

好了 这就是C语言的基本大概 希望能对你有用 也别忘了 点赞收藏 你的点赞是我创作的最大动力

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值