前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >初识C语言

初识C语言

作者头像
用户10517932
发布2023-10-07 12:51:02
1730
发布2023-10-07 12:51:02
举报
文章被收录于专栏:929KC

前言:初识C语言只是粗略的把C的基础知识蜻蜓点水般的过一遍,后期我会分享出详细的各个知识点详解。

初识C语言

什么是C语言?
  • C语言是一门高级编程语言,是人与计算机交流的工具。而C语言最擅长与计算机底层打交道,如擅长开发操作系统,驱动软件及硬件。
  • C语言是面向过程的语言,广泛用于工业上,因此也是一门工业语言。
  • C语言乃编程之本,正所谓C生万物。

数据类型

  1. char //字符数据类型
  2. short //短整型
  3. int // 整形
  4. lomg //长整形
  5. long long更长整形
  6. float .//单精度浮点数
  7. double //双精度浮点数 //以上C语言的内置类型 //C语言内置类型在计算机所占大小 变量的作用域和生命周期 作用域 作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字/变量名称并不是有效/可用。 而限定这个名字的可用性的代码范围就是这个名字/变量名称的作用域
    1. 局部变量的作用域就是所在局部的范围。
    2. 全局变量的作用域就是整个工程。 生命周期 变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。
      1. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束(出了大括号就无了)。
      2. 全局变量的生命周期是:整个程序的生命周期。

注意:**主函数是程序的入口。

代码语言:javascript
复制
  ​           在一个工程中,主函数有且只有一个。

​ C语言跨文件调用变量方法使用 extern

字符串+转义字符+注释

字符串
代码语言:javascript
复制
      "hello bit\n"

这种由双引号引起来的一串字符串称为字符串字符面值,或者简称字符串。

代码语言:javascript
复制
  注:字符串的结束标志是\0的转义字符,在计算字符串长度的时候\0是结束标志,不算字符串内容。

接下来通过代码演示

代码语言:javascript
复制
   int main(){
	char arr [] = { 'a','b','c'};
   	printf("%s\n", arr);
	char arr2[] = { 'a','b','c','\0'};
   	printf("%s", arr2);
   return 0;
   }
在这里插入图片描述
在这里插入图片描述

由于char arr [] 后面没有加\0所以输出结果为abc后再跟一些随机值,\0的位置是不定的是。\0之前abc之后可以是任意的数字,符号,汉字。而char arr2[] 中加了\0所以只输出abc不会像上面一样输出一些奇奇怪怪的值。

转义字符

故名思义就是改变其原来的意思,变成另一个意思。

假如我们要打印一个目录:c:\code\test.c\n,可能我们会天真以为它会原样输出,可是…

在这里插入图片描述
在这里插入图片描述

转义字符表

在这里插入图片描述
在这里插入图片描述

注释

代码语言:javascript
复制
1. 代码中不需要的代码 可以直接删,亦可以注释
2. 代码中有些难懂地方,可以加注释,既方便自己看,也方便别人看自己的代码。
注释风格

C语言的注释风格//AA

代码语言:javascript
复制
缺点:不能嵌套注释
  • C+++风格//xxxxxx 可以注释一行也可以多行
选择语句

​ 如果你打码把键盘敲烂,那么你就月薪多万,走上人生巅峰。

​ 如果你不打码,那么毕业即失业,就只能搬砖去了。

​ 这就是选择!

代码语言:javascript
复制
	int main()
{
	int coding = 0;
	printf("你会去敲代码吗?(选择1 or 0):>");
	scanf("%d", &coding);
	if (coding == 1)
	{
		prinf("坚持,走上人生巅峰r\n");
	}
	else
	{
		printf("放弃,工地搬砖!\n");
	}
	return 0;
}
循环语句

有些事必须一直做,比如日复一日的学习,打代码。比如四季轮回。

循环语句有三类

  • while语句
  • do…while语句
  • for语句
while
代码语言:javascript
复制
int main()
{
	int n;
	int sum=0;
	int i = 1;
	scanf("%d", &n);
	while (i <= n)
	{
		sum += i;
		i++;
	}
	printf("%d\n", sum);
	return 0;
}

循环次数最少0次

do …while
代码语言:javascript
复制
int main()
{
	int n;
	int sum=0;
	int i = 1;
	scanf("%d", &n);
	
	 do{
		sum += i;
		i++;
	} while (i <= n);
	printf("%d\n", sum);
	return 0;
}

先循环,再判断,循环次数最少1次

for
代码语言:javascript
复制
int main()
{
	int sum=0;
	int n;
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
		sum += i;
	}
	printf("%d\n", sum);
	return 0;
}

函数

  1. 库函数:C语言自己提供的
  2. 自定义函数自己写的
代码语言:javascript
复制
int Add(int x, int y)
{
	return x+y;
}
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;
}

函数的特点就是:简化代码,提高代码复用性

数组

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

C语言规定:数组的每个元素都有下标,下标是从0开始的。

数组可以通过下标来访问。

代码语言:javascript
复制
int arr[10] = { 0 };
	//定义一个数组里面有10个元素,下标范围是0~9。

数组的使用

代码语言:javascript
复制
int main() {
	
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	for (int i = 0; i <= 9; i++) {
		printf("%d\n", arr[i]);
	}
	return 0;
}

操作符

算术操作符

代码语言:javascript
复制
+ - * / %

移位操作符

代码语言:javascript
复制
>> <<

位操作符

代码语言:javascript
复制
& ^ |

赋值操作符

代码语言:javascript
复制
= += -= *= /= &= ^=  |=    >>=   <<=

单目操作符

代码语言:javascript
复制
!           逻辑反操作
-           负值
+           正值
&           取地址
sizeof      操作数的类型长度(以字节为单位)
~           对一个数的二进制按位取反
--          前置、后置--
++          前置、后置++
*           间接访问操作符(解引用操作符)
(类型)       强制类型转换
代码语言:javascript
复制
int main() {
	//C语言中,0表示假,非0表示真
	int flag = 5;
	if (!flag) {
		printf("hehehehe\n");
	}
	return 0;
}
int main() {
	int a = -10;
	int b = +a;
	printf("%d\n", b);

	return 0;
}

++与--
int main() {
	int a = 10;
	/*int b = a + 1;*/
	int b = a++;//前置++,先++,后使用//a=a+1;b=a;
	int b = ++a;//后置+=,先使用,后++//int b=a;a=a+1;
	int b = --a;*///a=a-1;b=a;
	int b = a--;//b=a; a=a-1;

	printf("a=%d b=%d\n", a, b);
	return 0;
}

关系操作符

代码语言:javascript
复制
>
>=
<
<=
!=   用于测试“不相等”
==      用于测试“相等”

逻辑操作符

代码语言:javascript
复制
&&     逻辑与
||     逻辑或

条件操作符

代码语言:javascript
复制
exp1 ? exp2 : exp3

下标引用,函数调用和结构成员

代码语言:javascript
复制
[] () . ->
代码语言:javascript
复制
int main() {
	int arr[10] = { 0 };
	arr[5] = 9;//[]下标引用操作符,它的操作数:数组名,下标。

	return 0;
}

int get_max(int x,int y) {
	return x > y ? x : y;
}
int main() {
	int m = get_max(3, 5); //函数的调用操作符,它的操作数是:函数名,3,5
	printf("%d", m);
	return 0;
}

常见关键字

代码语言:javascript
复制
auto  break   case  char  const   continue  default  do   double else  enum   
extern float  for   goto  if   int   long  register    return   short  signed
sizeof   static struct  switch  typedef union  unsigned   void  volatile  while

关键字typedef

typedef 顾名思义是类型定义,这里应该理解为类型重命名。

代码语言:javascript
复制
typedef unsigned int uint_32;
int main()
{
    //观察num1和num2,这两个变量的类型是一样的
    unsigned int num1 = 0;
    uint_32 num2 = 0;
    printf("%d\n", num1);
    printf("%d", num2);
    return 0;

static关键字

在C语言中: static是用来修饰变量和函数的

  1. 修饰局部变量-称为静态局部变量
  2. 修饰全局变量-称为静态全局变量
    1. 修饰函数-称为静态函数
代码语言:javascript
复制
//代码1
void text() {
		int k = 0;
	k++;
	printf("%d\n", k);
}
int main() {
	for (int i = 0; i < 10; i++) {
		text();
	}
	return 0;
}
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
void text() {
static	int k = 0;
	k++;
	printf("%d\n", k);
}
int main() {
	for (int i = 0; i < 10; i++) {
		text();
	}
	return 0;
}
在这里插入图片描述
在这里插入图片描述

结论:

static修饰局部变量改变了变量的生命周期 让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。

解释:

// static修饰的局部变量时候,局部变量就变成了静态的局部变量 // 出了局部范围,不会销毁,下一次进入函数依然存在 // 其实是因为:static修饰的局部变量是存储在静态区的 // static修饰局部变量是,实际改变的是变量的存储位置,本来一个局部变量是放在栈区的,被static // 修饰后放在静态区,从而导致,出了作用域依然存在,生命周期并没有结束

修饰全局变量-称为静态全局变量 或者修饰函数-称为静态函数

一个全局变量和函数是具有外部链接属性的,但是被static修饰后外部属性就变成了内部链接属性,只能在自己所在的源文件内部使用了。给人感觉上是作用域变小了

sizeof

代码语言:javascript
复制
int main() {
	int a = 10;
	printf("%d\n", sizeof(a));
	printf("%d\n", sizeof(int));
	//计算变量或其类型所占空间的大小
	return 0;
}

register

代码语言:javascript
复制
int main() {
	int a = 20;
	register int a = 10;//建议将10放到寄存器上
	
	return 0;
}

#define定义常量和宏

定义常量

代码语言:javascript
复制
#define MAX 1000
int main() {
	int m = MAX;
	printf("%d", m);
	return 0;
}

定义宏

代码语言:javascript
复制
#define MAX(x,y)(x>y?x:y)
int main() {
	int a = 90;
	int b = 98;
	int m = MAX(a, b);
	printf("%d", m);
	return 0;
}

指针

引文:电脑有32位操作系统/操作系统64,而32位和64位代表着什么呢?待我慢慢道来。就举32位操作系统为例,32位代表电脑有32根地址线/数据线。地址线接上电线在通电的话便可以产生电信号,电信号又会转换成数字信号1/0。电脑帮我们储存的数据,图片,音乐等等。都是储存在内存当中,而每个内存都有自己的地址,也有自己的大小,一个内存单元的大小就是一个字节。32位能产生2的32次方个地址,,就是00000000000000000000000000000000到11111111111111111111111111111111,也就意味着32位的电脑的内存是4G。我们所学的指针也不过就是地址,没有我们想的那么高不可攀。

二话不说上代码

代码语言:javascript
复制
int main() {
	char a = 'w';
	//%p打印地址
	printf("%p\n", &a);
return 0;
}

 //内存单元都有编号,编号就是地址,我们把地址称为
int main() {
	int a = 10;
	int* pa = &a;//pa是用来存放地址的,所以我们把pa叫做指针变量
	*pa = 1000;//*解引用操作符,它的意思就是通过pa中存放的地址,找到pa指向的内容。
	printf("%d", a);

	return 0;
}

指针大小

代码语言:javascript
复制
//指针大小
int main() {
int a = 10;
	int* pa = &a;
	printf("%d",sizeof(pa));
	return 0;
}

结论:指针大小在32位平台是4个字节,64位的平台是8个字节。

结构体

代码语言:javascript
复制
 //结构体
struct stu {
	char name[20];
	int age;
	char sex[3];
	char id[20];
};
void print(struct stu* ps, struct stu* pd) {
	/*printf("%s %d %s %s\n", (*ps).name, (*ps).age, (*ps).sex, (*ps).id);*/
	//->结构成员访问操作符
	//J结构指针->结构体成员
	printf("%s %d %s %s\n",ps->name,ps->age,ps->sex,ps->id );
	printf("%s %d %s %s\n", (*pd).name, (*pd).age, (*pd).sex, (*ps).id);
}
int main() {
	//结构体变量
	struct stu s1 = {"叶秋涵",19,"女","202104040207"};
	struct stu s2 = { "叶子秋",19,"男","202104040208" };
	//.结构成员访问操作符
	//结构体变量.结构体成员
	//输出结构体数据
	scanf("%s %d %s %s\n",s1.name,&(s1.age),s1.sex,s1.id);
		/*printf("%s %d %s %s\n", s1.name, s1.age, s1.sex, s1.id);
		printf("%s %d %s %s", s2.name, s2.age, s2.sex, s2.id);*/
		print(&s1, &s2);
	return 0;

今天的博客分享到此结束,希望对你的学习有所帮助!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 初识C语言
    • 什么是C语言?
    • 数据类型
    • 字符串+转义字符+注释
      • 转义字符
      • 注释
      • 函数
      • 数组
      • 数组的使用
      • 操作符
      • 常见关键字
      • 关键字typedef
      • static关键字
      • sizeof
      • register
      • #define定义常量和宏
      • 指针
        • 结构体
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档