前言
初识C语言
一、C语言基本思想介绍
1.main函数是程序的入口,且main函数有且只有一个.
2. <stdio.h>标准输入输出头文件.stdio =可以看成是standard和input还有output的组合.
二、数据类型
1.引入原由:因为不同数据类型所表示的数据范围不同,故引入数据类型可满足不同的场景.
2.具体大小:其大小(单位是字节)可根据编译器自动计算,代码如下:
printf("int: %d\n", sizeof(int));
printf("float: %d\n", sizeof(float));
printf("double:%d\n", sizeof(double));
printf("char: %d\n", sizeof(char));
printf("short: %d\n", sizeof(short));
printf("long: %d\n", sizeof(long));
printf("long long:%d\n", sizeof(long long));
printf("llong:%d\n", sizeof(long long));
printf("long double:%d\n", sizeof(long double));
程序运行结果如下:
三、常量和变量
1.常量:用于描述不变化的量.
2.变量:用于描述变化的量.
- 局部变量:在代码块({})之内的变量
- 全局变量:在代码块({})之外的变量
int num1 = 20; //全局变量
int main()
{
int num2 = 10; //局部变量
system("pause");
return 0;
}
思考:局部变量和全局变量可以共用同一个变量名么?
先看代码:
#include<stdio.h>
#include<windows.h>
int a = 100;
int main()
{
int a = 10;
printf("%d\n",a);
system("pause");
return 0;
}
再看运行结果:
编译通过,说明代码没有语法错误,那么是什么原因呢?
分析:
- 原来当局部变量和全局变量共用一个变量名的时,局部变量优先;
- 但是在编程过程中还是建议不要吧二者变量名设为同一个,因为随着代码工程量的增大,会增加程序出错的几率.
- 如果没有局部变量,只有全局变量,则程序自然只会输出全局变量.如图所示:
3.对两个数求和----使用输入函数scanf;
注意:使用scanf函数的时候,输入的值最终传到了初始化变量的地址中,故传值的时候要取地址(&)传值,而不是直接传值.
请看代码:
int main()
{
int num1 = 0;
int num2 = 0;
//输入数据---使用scanf函数
scanf("%d %d", &num1, &num2); //取地址传参
int sum = 0;
sum = num1 + num2;
printf("sum = %d\n",sum);
system("pause");
return 0;
}
接下来再看运行结果:
结果显示出错了???但是我们不必惊慌.只需要在main函数前面加上代码段"#pragma warning(disable:4996)"即可解决问题.
四、变量的作用域和生命周期
- 局部变量的作用域:通俗来讲,该段代码在哪里可以用,哪里就是他的作用域
例如:
分析:因为num的作用域就是包含他所在的1{}内,而输出是在2{}内,这是访问不了1{}的,故会报错.也就是说num的作用域就是1{}.如果把输出函数的作用域也放在1{}内,则可以正常运行.
相反的,如果num的作用域属于2{},printf的作用域属于1{},结果会怎样呢?
其实这就相当于num对于printf是全局变量,因此可以无限制的被调用. - 全局变量的作用域,看一段代码和运行结果:
因此我们可以得出全局变量的作用域在整个工程.验证在一个源文件中访问另外一个源文件中的全局变量-----新建一个源文件,取名"test1",输入如下代码:
#include<stdio.h>
int num2 = 200;
如果直接运行,则会报错;
此时则需要我们在test源文件中声明num2.
- 生命周期----即变量在代码块中的存在和实效
看一段代码:
int main()
{
{
int a = 10;
printf("%d\n",a); //ok
}
printf("%d\n",a); //error
system("pause");
return 0;
}
从代码中我们可以看出,变量a的生命周期只在内部的{}起作用,超出其范围则会失效.
因此,我可以得出结论:
- 局部变量的生命周期是从其进入作用域开始,出作用域结束.
- 全局变量的生命周期是整个程序.
总结
最后,附上今天学习的思维导图,对所学知识有一个宏观掌握.