【C语言基础学习笔记】一、初始C语言(1)

说明:我是一个初学c语言的小白,很多地方都不是很理解,所以就会自己动手敲代码进行相应的推理验证,希望可爱的你在看到这些步骤时,不要嫌弃我啰嗦。(比如吐槽:这作者咋这样呀,这么简单的还要敲代码验证,真菜呀!…我:好吧,我不装了,我摊牌了,我确实菜,真的菜,咋滴啦,还不允许初学者菜呀!)


1.第一个c语言程序

#include<stdio.h>
int main()
{
    
    
	printf("hello world!\n");
	return 0;
}
//所有的c语言程序都有相同的一个框架
int main()
{
    
    
	//这里是程序执行的具体内容
	return 0;
}

int 表示整型,跟后面return 0相呼应。
main()是我们的一个主函数,所有程序有且仅有一个主函数,如果不满足这个条件的时候,代码运行就会报错。
printf指的是打印函数, print(打印)f-- - function(函数),这个是c语言库函数中的一个函数,在stdio中,不在当前所写的函数里面,所以需要#include<stdio.h>引用头文件stdio.h。
结果展示:说明:vs2019中多了文件路径的这句话
在这里插入图片描述


2.数据类型

我们生活中有很多不同类型的数据,比如年龄22岁,身高171.33cm,名字“小明”等等,要记录不同类型的数据,我们就需要不同的数据类型的变量来向内存申请空间。例如:
int age = 22;
char ch = ‘A’;
float height = 171.33;
double weight = 145.11;
常用的数据类型有7种:char / int / short / long / long long / float / double
打印输出不同类型的变量需要用到不同的转义字符
例如打印
char类型的常用------ % c 字符类型 % s 字符串类型
int\short\long\long long ------ % d 整型十进制
float ------ % f 单精度浮点型十进制
double ------ % lf 双精度浮点型十进制
% p-- - 以地址的形式打印
不同的数据类型所占用的内存空间是不一样的,这也是为什么整型有int / short / long / long long 之分,合理的使用不同类型,可以节省内存空间。我们可以使用sizeof(数据类型); 来计算每种类型的空间大小。
sizeof本质是一种单目操作符,不是函数,所以不需要额外引用头文件。

#include<stdio.h>
int main()
{
    
    
	char ch;
	int a;
	short b;
	long c;
	long long d;
	float f;
	double lf;
	printf("Length of char:%d\n", sizeof(char));
	printf("Length of int:%d\n", sizeof(int));
	printf("Length of short:%d\n", sizeof(short));
	printf("Length of long:%d\n", sizeof(long));
	printf("Length of long long:%d\n", sizeof(long long));
	printf("Length of float:%d\n", sizeof(float));
	printf("Length of double:%d\n", sizeof(double));
	printf("Length of &char:%d\n", sizeof(&ch));
	printf("Length of &int:%d\n", sizeof(&a));
	printf("Length of &short:%d\n", sizeof(&b));
	printf("Length of &long:%d\n", sizeof(&c));
	printf("Length of &long long:%d\n", sizeof(&d));
	printf("Length of &float:%d\n", sizeof(&f));
	printf("Length of &double:%d\n", sizeof(&lf));
	return 0;
}

结果展示:
在这里插入图片描述
通过这个结果我们可以看到:
在这里插入图片描述
计算机是硬件-- - 通电 正电 1 负电 0
计算机中的存储单位
bit-- - 比特位 1
byte-- - 字节 = 8bit 10000001
kb-- - 千字节 = 1024byte
mb-- - 兆字节 = 1024kb
gb-- - 吉字节 = 1024mb
tb-- - 太字节 = 1024gb
pb-- - 拍字节 = 1024tb


3.变量

生活中有一些值是不变的,比如圆周率,性别,血型,身份证号
有些值则是可变的,比如年龄,体重,薪资,时间等
不变的值,c语言用常量来描述,变化的值,用变量来描述。
①变量定义的方式:类型 变量名 = 初始值; 例如:

int age = 24;
char ch = 'A';
float height = 176.14;

②变量的类型:局部变量、全局变量

int num1 = 20;//全局变量,定义在代码块({})之外的变量
int main()
{
    
    
	int num2 = 10;//局部变量,定义在代码块({})之内的变量
	return 0;
}

③当局部变量与全局变量名称相同的时候,局部变量优先

#include<stdio.h>
int a = 100;
int main()
{
    
    
	int a = 10;
	printf("%d\n", a);
	return 0;
}

在这里插入图片描述

#include<stdio.h>
int a = 100;
int main()
{
    
    
	//int a = 10;//局部变量与全局变量名称相同时,局部变量优先
	printf("%d\n", a);
	return 0;
}

在这里插入图片描述
下面再看这个例子:
在这里插入图片描述
将printf函数放到{}里面去
在这里插入图片描述
提示:main函数内部的变量一定是局部变量,但局部变量的作用范围不一定是main函数内部,而是局部变量所在的局部区域。


④变量的使用
计算两个数的和 num1 num2,从键盘输入接收数值,求和后打印出来,具体代码如下:
在这里插入图片描述
我们看到这时候代码运行报错,这时候别着急,这个跟c语言使用方式有关,c语言语法规定,变量要定义在当前代码块的最前面。调整后我们可以得到:
在这里插入图片描述
出现了一个新的错误,描述scanf函数unsafe,这个时候我们在头文件上方添加#define _CRT_SECURE_NO_WARNINGS 1 即可解决这个问题。(后面这个问题会单独出一篇文章分析讲解)
在这里插入图片描述


⑤变量的作用域和生命周期
作用域:程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效 / 可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域
简单来说:变量起作用的范围就是其作用域。
1)局部变量的作用域是变量所在的局部范围
2)全局变量的作用域是整个工程。
例如:num1 起作用的范围就是{ } 的范围,printf函数在这个函数内,所以可以正常打印输出。
在这里插入图片描述
如果num1的位置发生变化,放到小括号{}中,其作用域为黄框范围,此时printf函数在作用域之外,不能正常进行打印输出。
在这里插入图片描述
全局变量的作用域整个工程
1)同.c源文件中
在这里插入图片描述
2)不同.c源文件中,用extern来声明外部变量
在这里插入图片描述
在这里插入图片描述
生命周期:变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。
(变量什么时候存在、什么时候销毁、什么时候结束、什么时候起作用)
1)局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
2)全局变量的生命周期是:整个程序的生命周期。


彩蛋:

scanf()函数不安全的原因分析

int main()
{
    
    
	char arr[5] = {
    
     0 };
	scanf("%s", arr);
	printf("%s \n", arr);
	return 0;
}

这里定义的是一个包含5个字符的数组,通过键盘输入,运用scanf函数输入的时候,我们可以输入并打印出超过5个字符的数组,栈空间被破坏了,数组就越界访问了,这个时候就会报error错误。
scanf读取的时候没有考虑到数组的实际大小,不管输入的内容数组是否放不放的下。

猜你喜欢

转载自blog.csdn.net/QIYICat/article/details/115408881