C语言基础入门

C语言初步了解

目录

一. 什么是C语言

二. 第一个C语言项目

三. 数据类型        

四. 变量与常量

           1. 变量

               1.1 变量的分类

               1.2 变量的命名规则 

               1.3 变量的作用域和生命周期

            2. 常量

                2.1 常量的类型

五. 字符串+转移字符+注释

            1. 字符串

            2. 转义字符

            3. 注释

六. 选择语句和循环语句

            1. 选择语句

            2. 循环语句

七. 函数的使用

八. 数组

            1. 数组的定义

            2. 数组的下标

九. 操作符

十. 常见的关键字

十一. 指针

            1. 内存

            2. 指针变量的大小

十二. 结构体


一. 什么是C语言

C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易

的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语

言。

C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。

C语言是一个【结构化】的程序设计语言

  • 顺序结构
  • 选择结构
  • 循环结构

其编译器主要有Clang、GCC、WIN-TC、MSVC(VS2019)、Turbo C等。

其中的编译器我们就可以理解为人类与计算机通过编程语言交流的"翻译官"。

而我接下来的开发环境主要用的都是VS2022。

二. 第一个C语言项目

我相信我们每一位新手的第一个编程项目都是从"hello world"开始的。那么接下来就是用VS2022正式开始。

1. 打开VS2022的时候,出现的页面如图,然后点击创建新项目

2.然后选择空项目即可

3.下一步之后即可创建项目名称,选择存放的位置,这里跟自己的习惯即可。

4.创建好项目之后,找到解决方案资源管理器下的源文件,选择添加然后点击新建项

5.进去之后,选择第一个文件,这里注意的是源文件的名称默认打开时的后缀时.cpp(这个是按照C++编写的),我们需要把它改为.c即可。

6.创建完之后便是自己的第一个C语言项目

//这就是一个标准的主函数写法
#include <stdio.h> //std - 标准  i - intput o - output

int main()  //在C语言当中一定要有main函数,main函数是程序的入口,有且只有一个  
{
	printf("hello world\n"); // printf是一个库函数,专门用来打印数据的
	return 0;
}

三. 数据类型

数据类型主要包括的有内置的和自定义的,然后主要说的就是内置的数据类型,主要有:

char字符数据类型
short短整型
int整型
long长整型
long long更长的整型
float单精度浮点数
double双精度浮点数

每一个数据类型的大小我们也可以打印出来,这里便需要用到计算大小的关键字sizeof(后面会说),每个后面的单位是字节(byte)

#include <stdio.h> 
int main()
{
	printf("%zu\n", sizeof(char));
	printf("%zu\n", sizeof(short));
	printf("%zu\n", sizeof(int));
	printf("%zu\n", sizeof(long));
	printf("%zu\n", sizeof(long long));
	printf("%zu\n", sizeof(float));
	printf("%zu\n", sizeof(double));

}

其实这里的%zu可以换成%d,这样也是可以打印的,但是%zu更好一点

然后可以补充一点的就是

%d打印整型
%c打印字符
%s打印字符串
%f打印float类型的数据
%lf打印double类型的数据
%zu打印sizeof的返回值
%p打印指针变量的值,即内存地址

然后就是计算机单位(了解的可以跳过,^_^)

bit   -  比特位

byte   -   字节

kb  -   千字节

mb -   兆字节

gb -  千兆字节

tb - 太字节

pb - 拍字节

1byte=8bit 1kb=1024byte 1mb=1024kb 1gb=1024mb 1tb=1024gb  1pb=1024tb  

四. 变量与常量

1.变量

1.1 变量的分类

变量分为全局变量和局部变量。

#include <stdio.h>
int a = 50;//全局变量
int main()
{
	int a = 10;//局部变量

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

我们发现运行出来的结果是10;那么也可以知道当全局变量和局部变量都存在时,局部变量优先。

这里注意的是:一帮来说,全局变量和局部变量的名字应该不一样的。

1.2 变量的命名

1.有意义  比如:int age;

2.名字必须是字母,数字,下划线组成。

不能有特殊字符,不能以数字开头

3.变量名不能是关键字

1.3 变量的作用域和生命周期

变量的作用域

局部变量的作用域:变量所在的局部范围。

全局变量的作用域:整个工程。

变量的生命周期

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

全局变量的生命周期:整个程序的生命周期。

其实也可以来说作用域≈生命周期。

2. 常量

2.1常量类型

1.字面常量

2.const修饰的常变量

3.define的标识符常量

4.枚举常量

#include <stdio.h>
//枚举常量 是通过 enum 关键字定义的一组命名常量
enum Weekday {
	MONDAY,    
	TUESDAY,  
	WEDNESDAY, 
	THURSDAY,  
	FRIDAY,   
	SATURDAY,  
	SUNDAY     
};


//define定义的常量
#define MAX 100 //那么这个MAX就是一个常量


int main()
{
	30;
	'w';
	"abcd";//像这种数字,字符和字符串就是字面常量

	//const修饰的常变量
	const int a = 10;//a的本身是一个变量,但是被const修饰过后,拥有了常量的属性;
	a = 20; //就可以发现a无法被修改

	return 0;
}


//额外补充define可以定义宏(宏和函数有点类似)
//比如我们想要计算两个值的和

//#define Add(x,y) ((x)+(y))//Add是宏名  x和y是宏的参数,((x)+(y))是宏体
//int main()
//{
//	int a = 1;
//	int b = 2;
//	int sum = Add(a, b);
//	printf("%d\n", sum);
//	return 0;
//}

五.字符串+转义字符+注释

1.字符串

"hello world.\n"

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

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

那么也可以计算字符串的长度,使用strlen的时候需要加入#include <string.h>

#include <stdio.h>
#include <string.h>

int main()
{
	char arr1[] = { "abcd"};
	char arr2[] = { 'a','b','c','d','\0'};//如果这里没有加入\0的话,会打印出来随机值,一直找到\0为止
	printf("%d\n", strlen(arr1));// 4
	printf("%d\n", strlen(arr2));//计算字符串的长度的函数 string lenth
}

2.转义字符

\a响铃(一般没啥用)
\b退格(当前位置移到前一列)
\f换页
\n换行符(换到下一行开头)
\r回车符(回到当前行开头,不换行)
\t水平制表符(类似按 Tab 键,通常占 4 或 8 个空格)
\v垂直制表符
\\表示一个 \
\'表示一个 '
\"表示一个 "
\?表示一个 ?
\0空字符(字符串结束标志)
\ddd一到三个八进制代表的任意字符
\xhh十六进制代表的任意字符

这些很多都是可以自己在编译器里面进行感受的。

3.注释

/*

*/这个是可以进行多行注释

// 这种只能一行一行的注释

在vs2022里面,上方的红色下划线的的第一个是可以对所选代码进行注释,第二个就是取消注释。

六.选择语句和循环语句

1.选择语句

C语言中选择语句一般使用

if

else

switch

。。。

主要说明一下if  和  else

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h> 

int main()
{
	int a = 0;
	printf("上学\n");
	printf("学习C语言吗?(1/0)\n");
	scanf("%d", &a);
	if (a == 1) {
		printf("学\n");
	}
	else
	{
		printf("不学\n");
	}
	return 0;
		
}

这里值得注意的是我们是=使用scanf的时候,需要添加#define _CRT_SECURE_NO_WARNINGS ,但要确保它在 #include <stdio.h> 之前定义 。

2.循环语句

C语言中实现循环一般使用

while语句

for语句

do... while语句

七. 函数

函数的概念应该都不陌生,那么在C语言中如何使用(跟以上define定义的宏很相似)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h> 
//比如求两个整数的和
int Sum(int x, int y) 
{
	return x + y;
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int c = Sum(a, b);
	printf("%d\n", c);
	return 0;

}

八. 数组

1.数组的定义

int arr[10] = {1,2,3,4,5,6,7,8,9,10}; //定义一个整型组,最多放10个元素。

值得注意的是[ ]里面可以不输入值,这样的话就会根据你后面输入的元素来进行判断。

2.数组的下标

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

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

int arr[10]12345678910
下标0123456789

同样的可以通过编程来证明


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

九. 操作符

1.算术操作符

+      -       *       /        %

2. 移位操作符

>>   <<

3. 位操作符

&    ^    |

4. 赋值操作符

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

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

逻辑反操作(在C语言中,0表示假,非0表示真)

-

 负值

+

正值

&

取地址

sizeof

操作数的类型长度(以字节为单位)

~

对一个数的二进制按位取反

++

前置、后置++

--

 前置、后置--

*

间接访问操作符(解引用操作符)

(类型)

强制类型转换

6. 关系操作符

>

>=

<

<=

!=    用于测试"不相等"

==    用于测试"相等"

7. 逻辑操作符

&&    逻辑与(必须两个都为真)

||      逻辑或(有一个为真就行)

8. 条件操作符

 exp1 ?  exp2 : exp3

 exp1为真,exp2则为真,exp3则为假

exp1为假,exp2则为假,exp3则为真

9. 逗号表达式

 exp1 , exp2 , exp3 ,…..expn

逗号表达式就是逗号隔开的一串表达式

逗号表达式的特点:从左往右依次计算,整个表达式的结果就是最后一个表达式的结果

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

[]    ()    .    ->

十. 常见关键字

char字符数据类型enum枚举类型if条件判断continue跳出剩余循环
short短整型struct结构体elseif的否定分支goto无条件跳转
int整型union联合体(共用体)switch多分支forfor循环
long长整型typedef类型重命名caseswitch的分支while while循环和do...while循环
float单精度浮点数unsigned无符号类型defaultswitch的默认分支
double双精度浮点数signed有符号类型dodo...while循环
void空类型break跳出循环或switch语句

const定义常变量auto自动存储
sizeof计算数据类型或变量所占字节大小extern声明外部变量和函数
volatile防止编译器优化register寄存器
return函数返回static静态存储

十一. 指针

1. 内存

内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的。

所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。

为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。

#include<stdio.h>
int main()
{
	int a = 10;
	printf("%p\n", a);
	int* p = &a;
	//p就是指针变量,也就是存放地址的变量
	// *就是说明p就是指针变量
	//地址也被称为指针
	*p = 20;//解引用操作符,就是通过p存放的地址找到p所指向的对象,*p就是p指向的对象
	return 0;

}

2.指针变量的大小

1)指针变量的大小取决于地址的大小

2)32位平台的地址是32个bit位(就是4个字节)

3.)64位平台的地址是64个bit位(就是8个字节)


#include <stdio.h> 
int main()
{
	printf("%zu\n", sizeof(char*));
	printf("%zu\n", sizeof(short*));
	printf("%zu\n", sizeof(int*));
	printf("%zu\n", sizeof(long*));
	printf("%zu\n", sizeof(long long*));
	printf("%zu\n", sizeof(float*));
	printf("%zu\n", sizeof(double*));
	
}

其中在vs的左上方可以进行选择,x64就是64位,x86就是32位

十二. 结构体

结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。

比如描述学生,学生包含:名字+年龄+性别+学号这几项信息。

这里只能使用结构体来描述了。


#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h> 
struct Stu
{
	//成员
	char name[20];
	int age;
	char sex[10];
};


int main()
{
	struct Stu s = { "zhangsan",19,"nan" };
	printf("%s %d %s\n", s.name, s.age, s.sex);
	//结构体对象.成员
	return 0;
}

这是一种打印方式,也可以使用指针变量来打印

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h> 
struct Stu
{
	//成员
	char name[20];
	int age;
	char sex[10];
};

void print(struct Stu* qs)
{
	printf("%s %d %s\n", (*qs).name, (*qs).age, (*qs).sex);
	printf("%s %d %s\n", qs->name, qs->age, qs->sex);
	// 使用指向结构体的指针访问成员时,有两种方式:
// 1. (*指针变量).成员名
// 2. 指针变量->成员名
}

int main()
{
	struct Stu s = { "zhangsan",19,"nan" };
	
	print(&s);
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值