初识C语言

本文介绍了C语言的基础知识,包括C语言的起源、标准制定,项目创建过程,以及C++控制台应用的示例。内容涵盖了数据类型、变量、常量、字符串、数组、操作符、关键字、指针和结构体等内容,适合初学者了解C语言的核心概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 什么是C语言

人和计算机交流的语言;C语言是一门通用的计算机编程语言,广泛应用于底层开发。

 为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的语法,称为ANSI C,作为最初的标准。

编译器主要有ClangGCC、WIN-TC、SUBLIME、MSVC等。

2. 项目创建

C++控制台应用

源文件右键-添加-新建项-C++文件-改名.c后缀。

3. 第一个C语言程序

#include <stdio.h>   //引用头文件

int main()
{                             //main函数是程序的入口,一个工程中有且仅有一个
    printf("hello bit\n");    //输出hello bit   printf-库函数-在屏幕上打印信息,引用头文件stdio.h
    printf("hehe\n");         //输出hehe
    return 0;
}

 4. 数据类型

  • char         //字符数据类型,1字节
  • short        //短整型,2字节
  • int            //整型,4字节
  • long         //长整型,4字节
  • long long //更长的整型,8字节
  • float         //单精度浮点数,4字节
  • double     //双精度浮点数,8字节

5. 变量 常量

常量 - 不能改变的量

变量 - 能被改变的量

6. 变量分类

局部变量 - 大括号内部的变量

全局变量 - 大括号外部的变量

当局部变量和全局变量名字冲突的情况下,局部变量优先(不建议全局变量和局部变量名字写成一样)

出现scanf unsafe错误,方法一:#define _CRT_SECURE_NO_WARNINGS 1

7. 变量的作用域和生命周期

7.1 作用域

1.局部变量的作用域是变量所在的局部范围。

2.全局变量的作用域是整个工程。

(来自外部已定义的全局变量,使用前需先用extern声明)

7.2 生命周期

1.局部变量的生命周期是进入作用域开始,出作用域结束。

2.全局变量的生命周期是整个程序的生命周期。

8. 常量

C语言中的常量分为以下几种:

  • 字面常量
  • const修饰的常变量(本质是变量,但是不能被修改,有常量的属性)
  • #define定义的标识符常量
  • 枚举常量
#include<stdio.h>
#define MAX 100
#define STR "abcdef"

enum Color	
{
	//枚举常量
	RED,		//可能的取值,不会申请空间,不可更改
	GREEN,
	BLUE
};

enum Sex
{
	MALE,
	FEMALE,
	SECRET
};

int main()
{
	//字面常量
	30;
	3.14;
	'w';
	"abc";

	//const修饰的常变量
	const int num = 3;
	//num = 4;		//常变量不能修改
	printf("%d\n", num);

	//#define定义的标识符常量
	printf("%d\n", MAX);
	int a = MAX;
	printf("%d\n", a);
	printf("%s\n", STR);	//%s打印字符串

	//枚举常量
	//三原色
	enum Color c = RED;		//创建枚举变量,赋值RED;在创建变量的时候才会申请空间

	return 0;
}

9. 字符串

由双引号引起的一串字符称为字符串字面值,简称字符串。

字符串的结束标志是一个\0的转义字符。在计算字符串长度的时候\0是结束标志,不算作字符串内容。

int main()
{
	/*char ch= 'a'字符类型
	C语言中没有字符串*/
	char arr1[] = "abcdef";	//末尾是\0,是结束标志
	char arr2[] = { 'a','b','c','d','e','f' };
	char arr3[] = { 'a','b','c','d','e','f','\0'};
	printf("%s\n", arr1);
	printf("%s\n", arr2);
	printf("%s\n", arr3);
	return 0;
}

0 - 数字0

'0' - 字符0 - ASCII值是48

'\0' - 字符 - ASCII值是0

EOF - end of file 文件结束标志 值是-1

10. 转义字符

转义字符 - 转变原符号意思

转义字符释义
\?书写连续多个问号的时候使用,防止被解析成三字母词
\'用于表示字符常量'
\"用于表示字符常量"
\\用于表示一个反斜杠,防止被解释成一个转义序列符
\aa警告字符,蜂鸣
\b退格符
\f进纸符
\n换行
\r回车
\t水平制表符
\v垂直制表符
\dddddd表示1~3个八进制的ASCII编码字符
\xdd

dd表示2个十六进制的ASCII编码字符

格式释义
%d打印整型
%c打印字符
%s打印字符串
%f打印float类型的数据
%lf打印double类型的数据
%u打印无符号整型
%zu打印sizeof的返回值
%p打印地址

11. 注释

两种注释风格:

  • C语言注释风格/*xxxxxxx*/(不能嵌套)
  • C++注释风格//xxxxxx

快捷键Ctrl+E、C注释,Ctrl+E、U解除注释。

12. 选择语句

  • if else语句
  • switch语句
int main()
{
	printf("加入比特\n");
	printf("要好好学习吗(1/0)");
	int a = 0;
	scanf("%d", &a);
	if (a == 1)
		printf("好offer");
	else
		printf("卖红薯");
	return 0;
}

13. 循环语句

  • while语句
  • for语句
  • do...while语句
int main()
{
	int line = 0;
	printf("加入比特\n");
	while (line != 10)				//line小于10的时候保持循环
	{
		printf("写代码\n");
		line++;
	}								//大于10的时候跳出循环
	if (line >= 10)
	{
		printf("好offer");
	}

	return 0;
}

14. 函数

简化代码,方便代码的复用。

15. 数组

15.1 数组定义

一组相同类型元素的集合。

中括号内写常量则元素个数为所写常量,没写常量则数组根据后面括号内的元组个数自动创建。

int arr[10]={0,1,2,3,4,5,6,7,8,9};    //整型数组,中括号内有常量则最多放所写常量数个

15.2 数组下标

数组的每个元素都有一个下标,下标是从0开始的。

15.3 数组使用

int arr[10] = { 1 };
int i = 0;
while (i < 10)
{
	printf("%d ", arr[i]);
	i++;
}
printf("\n");

16. 操作符

算术操作符

+ - * / %

移位操作符

>> <<

位操作符

& ^ |

赋值操作符

= += -= *= /= &= ^= |= >>= <<=

单目操作符(只有一个操作数的操作符)

!逻辑反操作
-负值
+正值
&取地址
sizeof操作数的类型长度(以字节为单位)
~对一个数的二进制按位取反
--前置、后置--
++前置、后置++
*间接访问操作符(解引用操作符)
(类型)强制类型转换

关系操作符

> >= < <= != ==

逻辑操作符

&& ||

条件操作符

exp1?exp2:exp3

逗号表达式(从左向右依次计算,整个表达式的结果是最后一个表达式的结果)

exp1,exp2,exp3, ......expN

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

[] () . ->

17. 常见关键字

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

define不是关键字,是预处理指令。

变量的命名:

  1. 要有意义
  2. 必须是字母、数字、下划线组成,不能有特殊字符,同时不能以数字开头
  3. 变量名不能是关键字

17.1 关键字typedef

类型定义,可以理解为类型重命名。

int main()
{
	typedef unsigned int uint;
	unsigned int num0 = 10;
	uint num1 = 10;                //unsigned int和uint等价
	return 0;
}

17.2 关键字static

static是用来修饰变量和函数的

  1. 修饰局部变量-称为静态局部变量
  2. 修饰全局变量-称为静态全局变量
  3. 修饰函数-成为静态函数

17.2.1 修饰局部变量

static修饰局部变量的时候,局部变量出了作用域,不销毁。

本质上,static修饰局部变量的时候,改变了变量的存储位置。影响了变量的生命周期,和程序的生命周期一样。

void test()
{
	static int a = 1;		//static修饰局部变量的时候,局部变量出了作用域,不销毁。
	a++;					//本质上,static修饰局部变量的时候,改变了变量的存储位置。
	printf("%d\n", a);		//影响了变量的生命周期,和程序的生命周期一样。
}

int main()
{
	int i = 0;
	while (i < 10)
	{
		test();
		i++;
	}
	return 0;
}

17.2.2 修饰全局变量

static修饰全局变量的时候,这个全局变量的外部链接属性就变成了内部链接属性。

其他源文件(.c)就不能再使用到这个全局变量了。同时也改变了变量的存储位置。

17.2.3 修饰函数

同全局变量。

static修饰函数的时候,这个函数的外部链接属性就变成了内部链接属性。

其他源文件(.c)就不能再使用到这个函数了。同时也改变了函数的存储位置。

18. #define定义常量和宏

宏是完成替换的,本质是把x+y替换到ADD的位置上。

#define ADD(x,y) ((x)+(y))	//定义一个宏,宏的定义是有参数的

int main()
{
	int a = 10;
	int b = 20;
	int c = ADD(a, b);
	printf("%d\n", c);
	return 0;
}

19. 指针

19.1 内存

为了有效地使用内存,给每个内存单元进行编号,这些编号称为该内存的内存单元的地址。

地址也被称为指针。用来存放指针(地址)的变量也被称为指针变量。

19.2 指针变量的大小

不管是什么类型的指针,创建的时候都是在创建指针变量,指针变量是用来存放地址的,指针变量的大小取决于一个地址存放的时候需要多大的空间。32位机器上的地址:32bit位 - 4字节,所以指针变量的大小是4个字节。64位机器上的地址:64bit位 - 8字节,所以指针变量的大小是8个字节。

20. 结构体

C语言给了自定义类型的能力,自定义类型中有一种叫:结构体struct。

把一些单一类型组合在一起的做法。

struct Stu				//类型,不占空间,在创建对象的时候才会占用空间。
{
	char name[20];
	int age;
	char sex[10];
	char tele[12];
};

void print(struct Stu* ps)		//输入的ps为指针变量,是s的地址
{
	printf("%s %d %s %s", (*ps).name, (*ps).age, (*ps).sex, (*ps).tele);		//因为ps是指针,先*ps解引用找到s,再引用成员名
	printf("%s %d %s %s", ps->name, ps->age, ps->sex, ps->tele);				//指针变量->成员名,直接找到成员
}

int main()
{
	struct Stu s = { "zhangsan",20,"nan","10010001000" };		//创建对象并且初始化
	printf("%s %d %s %s\n", s.name, s.age, s.sex, s.tele);		//打印对象成员   结构体对象.成员名
    print(&s);
	return 0;
}


资源下载链接为: https://pan.quark.cn/s/9a27693985af 《基于SSM的JSP招聘网》是一款功能丰富的在线招聘平台,主要面向普通游客、求职者、企业和管理员四种用户角色,提供了多样化的服务与管理功能。该系统采用SSM(Spring、SpringMVC、MyBatis)技术栈开发,确保了系统的稳定性与高效性。以下是对系统功能模块及其技术实现的介绍。 对于普通游客,系统提供职位浏览功能。游客可以查看平台上的各种招聘信息,如职位描述、工作职责、薪资待遇等。这需要后台数据库对招聘信息进行有效存储和检索。在SSM框架中,SpringMVC负责处理HTTP请求,将数据传递给Spring服务层进行业务逻辑处理,MyBatis作为持久层工具,执行SQL查询并将结果映射为Java对象。 求职者注册成为平台用户后,可进行职位收藏和投递。收藏的职位信息会保存在个人中心,方便随时查看。职位投递功能涉及用户个人信息与简历的提交,需要系统具备用户认证和授权机制,可通过Spring Security或Apache Shiro实现。此外,系统可能采用AJAX技术进行异步操作,如即时刷新收藏夹状态,以提升用户体验。 企业用户可在系统中发布职位、查看求职者简历。发布职位时,需进行表单验证和数据合法性检查,SpringMVC的控制器可协同前端校验库(如Hibernate Validator)完成。查看简历时,企业可对求职者进行筛选和评价,这要求数据库设计合理,以便快速查询和分析求职者信息。 管理员负责管理平台运行,包括用户管理、职位审核、系统设置等。管理员模块通常包含后台管理界面,通过SpringMVC的模型视图解析器和模板引擎(如Thymeleaf或FreeMarker)生成动态页面。同时,日志记录和异常处理必不可少,Spring框架提供了强大的日志和AOP支持,可方便实现这些功
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值