初识C语言


前言

某985金统系大一零基础纯小白,这是我自己这两个星期对c语言初次认识的结果与总结。初始C语言不必深究,先知道有这么个东西就行。就像高考数学一样,没有人直接上来就一轮,都是先粗略地整体学完再进行深究(别杠我呜呜我真的就这样学的)


一、什么是C语言

①是一门通用计算机编程语言,广泛应用于底层开发。
②硬件——驱动层——操作系统(windows linux mac)——应用软件
③操作系统之上称为上层软件 以下称为底层
④二进制的指令——汇编指令(助记符)——B语言——C语言
⑤为了统一C语言语法,美国国家标准局制定了ANSI C 目前2011年发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准
⑥编译器(将代码翻译成能让电脑执行看得懂的命令)主要有Clang、GCC、MSVC(VS2019就是用这个)
编译器:将C语言代码转换成CPU能够识别的二进制指令,也就是将代码加工成 .exe 程序;这个工具是一个特殊的软件,叫做编译器

二、第一个C语言程序

如何打开VS2019创建项目?

1.打开空项目
2.【视图】—【解决资源管理器】
3. 创建源文件(.c为后缀的叫源文件 .h叫头文件)
【源文件】-【添加】-【新建项】

在这里插入图片描述
4.修改名称为test.c
在这里插入图片描述


三、VS2019的一些常用快捷键

  1. 快速运行代码:ctrl+fn+f5
  2. 添加注释:ctrl+k+C
  3. 取消注释:ctrl+k+u
  4. ctrl+滚轮进行字体大小设置
  5. 监视:ctrl+f10 调试—窗口—监视—任意点击监视1—输入要监视的变量
  6. 深入函数内部监视:ctrl+f10运行到该函数所在行—按下ctrl+f11—右键点击该行—查看反编码

四、数据类型

在这里插入图片描述

结果分别是1、2、4、4、8、4、8

创建变量的本质:通过类型向内存申请空间
在这里插入图片描述

五、变量,常量

5.1局部变量和全局变量

  • ①不允许在同一个作用域中定义多个相同名称的变量
    比如:在一个班级中存在两个名字相同的学生王帅,当老师点王帅回答问题时,那个回答就冲突了。

  • ②允许在不同的作用域中定义多个相同名称的变量
    比如:两个班级中各有一个王帅,老师在A班中点王帅回答问题,不会有任何歧义。

  • ③当局部变量和全局变量同名的时候,局部变量优先使用。

5.2变量的使用——初始化所有变量

在这里插入图片描述

一定要注意!!!scanf要取地址&!!!!

5.3外部全局变量的调用

如果有来自其他地方的全局变量
用extern 变量类型 变量名字;在这里插入图片描述

5.4常量的分类

①字面常量 ②const修饰的常变量 ③#define定义的标识符常量 ④枚举常量

#include <stdio.h>
//建议自己复制粘贴过去实操一遍
//举例
enum Sex
{
	MALE,
	FEMALE,
	SECRET
};
//括号中的MALE,FEMALE,SECRET是枚举常量
int main()
{
   //字面常量演示
   3.14;//字面常量
   1000;//字面常量
   
   //const 修饰的常变量
   const float pai = 3.14f;   //这里的pai是const修饰的常变量
   pai = 5.14;//是不能直接修改的!
   
   //#define的标识符常量 演示
#define MAX 100
   printf("max = %d\n", MAX);
   
   //枚举常量演示
   printf("%d\n", MALE);
   printf("%d\n", FEMALE);
   printf("%d\n", SECRET);
   //注:枚举常量的默认是从0开始,依次向下递增1的

六、VS2019每次更新后如何让scanf每次打开都能用

①打开everything搜索newc++
②找到文件并且打开路径
③拷贝文件到桌面 用记事本打开后复制粘贴那行代码
④用vs打开桌面上这份文件并且ctrl+s保存下来即可
⑤再用桌面文件替换原来那份newc++文件


七、字符串+转义字符+注释

7.1字符串

  • 由双引号引起来的叫做字符串 在c语言中他没有类型
  • 由单引号引起来的叫做字符 在c语言中他的数据类型是char
  • 字符串的结束表示是\0转义字符,在计算字符串长度时候不计入#include
<stdio.h>
//下面代码,打印结果是什么?为什么?(突出'\0'的重要性)
int main()
{
   char arr1[] = "bit";
   char arr2[] = {'b', 'i', 't'};
   char arr3[] = {'b', 'i', 't''\0'};
   printf("%s\n", arr1);
   printf("%s\n", arr2);
   printf("%s\n", arr3);
   return 0;
}

在这里插入图片描述

7.2 转义字符

空格也算是一个字符 \t也只算一个字符

转义字符 释义
\?
在书写连续多个问号时使用,防止他们被解析成三字母词
\'
用于表示字符常量'
\“
用于表示一个字符串内部的双引号
\\
用于表示一个反斜杠,防止它被解释为一个转义序列符。
\a
警告字符,蜂鸣
\b
退格符
\f
进纸符
\n
换行
\r
回车
\t
水平制表符
\v
垂直制表符
\ddd
ddd表示1~3个八进制的数字。 如: \130 X
\xdd
dd表示2个十六进制数字。 如: \x30 0

7.3 注释

  • C语言风格的注释 /xxxxxx/
    缺陷:不能嵌套注释
  • C++风格的注释 //xxxxxxxx
    可以注释一行也可以注释多行

八、选择语句

#include <stdio.h>
int main()
{
   int coding = 0;
   printf("你会去敲代码吗?(选择1 or 0):>");
   scanf("%d", &coding);
   if(coding == 1)
  {
      prinf("坚持,你会有好offer\n");
  }
   else
  {
      printf("放弃,回家卖红薯\n");
  }
   return 0;
}

九、循环语句

//while循环的实例
#include <stdio.h>
int main()
{
   printf("下载vs2019\n");
   int line = 0;
   while(line<=20000)
  {
       line++;
       printf("我要继续努力敲代码\n");
  }
   if(line>20000)
       printf("好offer\n");
   return 0;
}

十、函数

#include <stdio.h>
int main()
{
   int num1 = 0;
  int num2 = 0;
   int sum = 0;
   printf("输入两个操作数:>");
   scanf("%d %d", &num1, &num2);
   sum = num1 + num2;
   printf("sum = %d\n", sum);
   return 0;
}
上述代码,写成函数如下:
#include <stdio.h>
int Add(int x, int y)
{
  int z = x+y;
  return z;
}
int main()
{
   int num1 = 0;
  int num2 = 0;
   int sum = 0;
   printf("输入两个操作数:>");
   scanf("%d %d", &num1, &num2);
   sum = Add(num1, num2);
   printf("sum = %d\n", sum);
   return 0;
}

十一、数组

11.1数组的定义:一组相同类型元素的集合

int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素
//如果不知道数组提前占多少内存
//就直接arr[]里面什么都不写即可

11.2 数组的下标

在这里插入图片描述

11.3数组的使用

数组的初始化如果未完全 则会自动填充\0

#include <stdio.h>
int main()
{
int i = 0;
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
for(i=0; i<10; i++)
{
      printf("%d ", arr[i]);
}
printf("\n");
   return 0;
}

十二、如何在vs2019窗口调试

按下ctrl+f10之后(笔记本电脑按ctrl+fn+f10)在这里插入图片描述

十三、%d %s的意思

在这里插入图片描述

十四、三目操作符

int c =a>b?a:b;
//如果a>b的结果为真就输出a
//如果a>b的结果为假就输出b

十五、关键字:typedef

顾名思义:就是对类型进行重命名

//将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名
typedef unsigned int uint_32;
int main()
{
   //观察num1和num2,这两个变量的类型是一样的
   unsigned int num1 = 0;
   uint_32 num2 = 0;
   return 0;
}

十六、关键字:static

#关键字void表示这个函数没有return返回值

  • static修饰局部变量:放到静态区域
  • static修饰全局变量:使得全局变量由外部链接属性变为内部链接属性,其它源文件.c不能再使用它
  • static修饰别的文件的函数:还是外部链接属性变为内部链接属性,其他源文件.c不能再使用它extern int Add(int x,int y);

①修饰局部变量:在这里插入图片描述

  • 输出的结果是10个2 说明每次进入到test这个函数 都是a=1。
  • 这也说明了a这个变量的作用域是在test这个函数内部 只要使用完test这个函数,变量a立刻被销毁,即生命周期结束。
  • 而经过了static修饰的a,则可在整个程序存在 这时候a就不会被销毁了 且每次进入test函数的第一行都失效不会再变为1。

#而加入了static之后:在这里插入图片描述
解释原因:计算机的内存分为了栈区、堆区和静态区;在这里插入图片描述

②修饰全局变量在这里插入图片描述

③修饰函数
在这里插入图片描述

十七、#define定义常量和宏

再次强调:知道有这么个东西就行了现在!

//define定义标识符常量
#define MAX 1000
//define定义宏
#define ADD(x, y) ((x)+(y))
#include <stdio.h>
int main()
{
   int sum = ADD(2, 3);
   printf("sum = %d\n", sum);
   
   sum = 10*ADD(2, 3);
   printf("sum = %d\n", sum);
   
   return 0;
}

十八、指针!

18.1 内存

  • 内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。
  • 所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。
  • 为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址
  • 手机很喜欢说自己内存4G 6G 8G
    那么可以换算以下32位电脑,意味着它拥有三十二根地址线,在通电的时候可以产生脉冲信号0或者是1,那么就会产生总共2的32次方个地址序列,已知每个地址序列的大小是1kb,那么总共就有4,264,967,296byte,经过换算,➗1024=4,194,304mb,➗1024=4096Mb,➗1024=4GB,这就是内存大小!!!
  • 在内存地址中,用十六进制进行地址序列命名
    在这里插入图片描述

18.2如何在vs2019上查看内存

在ctrl+f10之后才能看到内存和监视!!!在这里插入图片描述在这里插入图片描述
在这里插入图片描述

int main()
{
	int a = 10;//向内存申请了四个字节的内存空间 因为整型的大小是四个字节
	//a占了四个字节所以有四个地址 这时候a的地址取出来的应该是第一个也就是最小的地址
	&a;//取地址操作符 这样可以取出a的地址 用调试查看地址
	printf("%p\n", &a);//%p是以地址的形式来打印
    int* p =&a;//用int*类型存储a的地址到变量p中,此时p被称为指针变量
    //存放地址的变量被称为指针变量 指针=编号=地址
	return 0;
}

在这里插入图片描述

18.3小科普:

0a 00 00 00
08 09 0a 0b
所以下面一行是0c

10进制由0123456789 十个数字组成
8进制则是0-7
2进制是0-1
16进制是0-9、A-F
  • 10转换成16进制正是 0x 00 00 00 00 0a
  • 这个0x是十六进制的开头 八进制用0开头 二进制则是b
  • 所以可以看见内存中的数据是倒着的存放形式(至于为什么是倒着存后面会讲)

18.4 指针变量的大小

32bit位电脑:4byte;
64bit位电脑:8byte;

十九、结构体

  • 结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。
  • 比如描述学生,学生包含: 名字+年龄+性别+学号 这几项信息。
  • 这里只能使用结构体来描述了。
- struct Stu
{
   char name[20];//名字
   int age;      //年龄
   char sex[5];  //性别
   char id[15]//学号
};
//打印结构体信息
struct Stu s = {"张三"20"男""20180101"};
//.为结构成员访问操作符
printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id);
//->操作符
struct Stu *ps = &s;
printf("name = %s age = %d sex = %s id = %s\n", ps->name, ps->age, ps->sex, ps-
>id);
  • 27
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值