欢迎光顾C语言的世界(C语言基础知识)

C语言中的第一个代码

int main()
{
	printf("Hello World!\n");//打印结果为Hello World!
	return 0;
}

计算机中的单位

bit – 比特位
1 byte - 字节 = 8 bit
1 kb = 1024 byte
1 mb = 1024 kb
1 gb =1024 mb
1 tb = 1024 gb
1 pb = 1024 tb

C语言中的数据类型

(大小单位是字节):

char 字符型(1)
short 短整型 (2)
int 整型 (4)
long 长整型(4)
long long 更长的整型 (8)
float 单精度浮点型 (4)
double 双精度浮点型(8)

在C语言中,如何创建一个变量:

类型+变量的名字 = 值
例如:int a = 20 char b = ‘c’ double d = 1.0
变量:能被改变的量
常量:不能被改变的量

变量的分类:
局部变量:{ }内部定义的
全局变量:{ }外部定义的

注意:当局部变量和全局变量名字冲突的情况下,局部变量优先。

在这里,给大家写一个简单的C语言代码,让大家初识一下C语言变量的使用。
写一个代码,求输入两个整数的和

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

变量的作用域和生命周期

作用域:限定变量名字的可用性的代码范围就是这个名字的作用域。通俗来讲就是,一个变量能在哪里使用,哪里就是它的作用域。
局部变量的作用域:就是局部变量所在的局部范围。
全局变量的作用域:整个工程内

生命周期:指的是变量的创建和销毁之间的时间段
局部变量的生命周期:变量进入局部范围那一刻,生命开始;离开局部范围那一刻,生命结束。
全局变量的生命周期:整个main函数内,即整个程序的生命周期。

常量

C语言中的常量分为:
1)字面常量
例如:3 、‘a’、“abcdef”
2)const修饰的常变量
例如:const int num = 10
num就是常变量,具有常属性(不能被改变的属性)。本质还是变量。
3)#define定义的标识符常量
例如:#define MAX 10000
MAX在这里就是define定义的标识符常量,在这里MAX的值就是10000。
4)枚举常量

 例如:指的是可以一一列举的常量

> enum Sex
> {
>      MALE,//枚举常量,不赋值的话,默认从0开始。
>      FEMALE,
>      SECRET
> };

字符串+转义字符+注释

字符串就是一串字符 - 用双引号引起的一串字符就是字符串。
注意:字符串在结尾的位置隐藏了一个\0的字符,\0是字符串的结束标志。

在这里给大家一个实例:
#include <stdio.h>


int main()
{
	char arr1[] = "abc";
	char arr2[] = { 'a', 'b', 'c' };
	char arr3[] = { 'a', 'b', 'c' ,'\0'};
	printf("%s\n", arr1);//abc
	printf("%s\n", arr2);//abc烫烫烫
	//这是为什么呢?原因就是%s是要打印一个字符串的,而字符串的结尾标志
	//是\0,而arr2的数组里面没有\0,因此不会遇到结束标志,从而停止。
	printf("%s\n", arr3);//abc
	//如果按照arr3打印,才会打印出abc。

	return 0;
}

在这里给大家展示一个求字符串的长度的函数:strlen()

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

int main()
{
	int len = strlen("abc");
	printf("%d\n", len);//3
	char arr2[] = { 'a', 'b', 'c' };
	printf("%d\n", strlen(arr2));//随机值,因为没有结束标志\0。
	return 0;
}

注意:字符串的结束标志虽然是\0,但是在用strlen来计算字符串的长度时,是不会把\0当作内容计算的。因为它只是结束的标志,不能算作内容。
但是在用sizeof来计算数组或者字符串大小的时候,\0是要被算作内容的,因为它占据着空间。

转义字符
一个代码让你搞懂什么是转义字符:

int main()
{
printf("c:\code\test.c\n");//   \t在这里是转义字符,为水平制表符
//你以为的结果是c:\code\test.c\n
//但实际的结果是c:code  est.c
return 0;
}

顾名思义,转义字符就是转变这个字符的原有意思。下面给大家介绍一些常见的转义字符。

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

注释

注释是用来解释复杂代码的。
两种注释方法:
1)//
2) /* …*/

选择语句

这里就是一个选择语句的示例:

int main()
{
	int a = 0;
	printf("你是男孩还是女孩?(选择1 or 0):>");
	scanf("%d", &a);
	if (a == 1)
	{
		printf("我是男孩子\n");
	}
	else
	{
		printf("我是女孩子\n");
	}
	return 0;
}

循环语句

C语言中实现循环一般有三种语句:
1)while语句
2)for语句
3)do…while语句

这里给大家以while语句为例,演示一个简单的循环语句:

int main()
{
	int a = 0;
	while (a < 30000)//循环
	{
		printf("工资:%d\n", a);
		a++;
	}
	if (a == 30000)
	{
		printf("领到工资30000元\n");
	}
	return 0;
}

函数

上面我们写了一个求两个整数之和的代码。在这里,我们在此基础上加以修改,借用函数来实现这个功能的实现。
示例如下:

int Add(int x, int y)
{
	int z = 0;
	z = x + y;
	return z;
}
int main()
{
	int a = 0;
	int b = 0;
	int sum = 0;
	printf("请输入两个数:>");
	scanf("%d %d", &a, &b);
	//sum = a + b;
	sum = Add(a, b);
	printf("%d\n", sum);
	return 0;
}

数组

> 数组是什么?
> 一组相同类型的元素的集合就是数组。
> 例如:int arr[10] = {1,2,3,4,5,6,7,8,9,10};
>      char ch[5] = {'a','b','c'}; //不完全初始化,剩余的默认为0.
> 数组是用下标来访问的,数组的下标从0开始。

操作符

算数操作符:+   -   *  /  %

移位操作符:>>(右移)   <<(左移)

位操作符:&(按位与)   ^(按位异或)   |(按位或)

赋值操作符:=  +=  -=  *=  /=  &=  ^=  |=  >>=  <<=

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

关系操作符:
>
>=
<
<=
!=    用于测试“不相等”
==    用于测试“相等

逻辑操作符:
&&   逻辑与
||   逻辑或

条件操作符:
exp1 ? exp2 : exp3

逗号表达式:
exp1, exp2, exp3, …expN

下标引用、函数调用和结构成员:
[]   ()   .   ->

关键字

常见关键字:
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
在这里介绍几个关键字:
auto 是自动的 - 每个局部变量都是auto修饰的
extern 是用来申明外部符号的
register  寄存器关键字,把数据存到寄存器中
signed  有符号的
unsigned  无符号的
static  静态的
union  联合体(共用体)
void  无(空)
typedef  类型定义,类型重命名
注意:define、include不是关键字,是预处理指令。

static 静态的
1)static修饰局部变量
static修饰局部变量,改变了局部变量的生命周期(本质上是改变了变量的存储类型)
2)static修饰全局变量
static修饰全局变量,使得全局变量只能在自己所在的源文件内部可以使用,其他源文件不能使用。
全局变量,在其他源文件内部可以被使用,是因为全局变量具有外部连接属性,但是被static修饰之后,就变成了内部连接属性,其他源文件就不能链接到这个静态的全局变量了。
3)static修饰函数
static修饰函数,使得函数只能在自己所在的源文件内部使用,不能在其他源文件内部使用。本质上,static是将函数的外部链接属性变成了内部链接属性!(和static修饰全局变量一样!)

define定义常量和宏

define是一个预处理指令
1)define定义符号
2)define定义宏:

示例:
#define ADD(X,Y) X+Y
int main()
{
	printf("%d\n", ADD(2, 3));
	return 0;
}

指针

指针是用来存放地址的
int main()
{
	int a = 10;//a在内存中要分配空间的 - 4个字节
	printf("%p\n", &a);//%p专门用来打印地址的
	int * pa = &a;//pa是用来存放地址的,在c语言中pa是叫指针变量
	//*说明pa是指针变量
	//int说明pa执行的对象是int类型的
	return 0;
}
int main()
{
	int a = 10;
	int * pa = &a;
	*pa = 20;//*解引用操作,*pa就是通过pa里边的地址,找到a。
	printf("%d\n", a);
	return 0;
}

指针变量的大小

int main()
{
	printf("%d\n", sizeof(char *));//4
	printf("%d\n", sizeof(short *));//4
	printf("%d\n", sizeof(int *));//4
	printf("%d\n", sizeof(double *));//4
	return 0;
}

由此可见,指针大小在32位平台是4个字节,64位平台是8个字节。

结构体

结构体可以让C语言创建新的类型出来。什么意思呢?示例如下:

//创建一个学生的类型
struct Stu
{
	char name[20];//成员变量
	int age;
	double score;
};
//创建一个书的类型
struct Book
{
	char name[20];
	float price;
	char id[30];
};
int main()
{
	struct Stu s = { "张三", 20, 85.5 };
	//结构体的创建和初始化
	printf("1:%s %d %lf\n", s.name, s.age, s.score);
	//结构体变量.成员变量
	struct Stu * ps = &s;
	printf("2:%s %d %lf\n", (*ps).name, (*ps).age, (*ps).score); 
	printf("3:%s %d %lf\n", ps->name, ps->age, ps->score);
	//结构体指针 -> 成员变量名
	return 0;
}

C语言基础知识暂时告一段落了!
希望这些对大家有帮助。
下次再会!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值