初学C语言必须知道的那点事儿

初学C语言必须知道的那点事儿

  • 解析如何打印"hello world"
  • 数据类型
    • 用代码求出数据类型的大小
  • 变量和常量
    • 变量
      • 变量的概念
      • 变量的定义
      • 变量的分类
        • 局部变量
        • 全局变量
        • 全局变量和局部变量的辨析
      • 变量的作用域和生命周期
        • 作用域
          • 局部变量的作用域
          • 全局变量的作用域
      • 生命周期
        • 局部变量的生命周期
        • 全局变量的生命周期
    • 常量
      • 常量的概念
      • 常量的分类
        • 字面常量
        • const修饰的常变量
        • #define定义的标识符常量
        • 枚举常量

解析如何打印"hello world"

代码如下:

#include
int main()
{
	printf("hello world");
	return 0;
}

先从第二行开始说起:int main()中的main()代表的是主函数,也就是程序的入口,任何程序的执行都是从进入主函数开始的,main为函数名,函数名后面的括号里边放的是形参变量,因为在main函数中没有形参,所以可以省去不写,或者写成int main (void)的形式。而这个int则代表的是这个函数的放回值为,这里返回值为整型。
在printf(“hello world”)语句中printf是一个库函数(C语言编译器提供的一个现成的函数 使用之前要包含头文件,也就是#include)。
"hello world"是一个字符串
return 0则是呼应了整个函数的返回值类型为int型

数据类型

类型 大小(字节) 名称
char 1 字符
short 2 短整型
int 4 整型
long 4 长整型
long long 8 长长整型
float 4 单精度浮点型
double 8 双精度浮点型

用代码求出数据类型的大小

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

在上面代码中,sizeof是一个用以计算类型、变量所占内存空间大小的操作符
所得到的结果如下
在这里插入图片描述

变量和常量

变量

变量的概念

变量顾名思义,即为其值在程序执行过程可以发生改变的量

变量的定义

数据类型 变量名=初始值
例如:

int age;
float weight = 55.5f;  //55.5直接写出来,编译器默认是double类型
double weight2 = 60.2;

变量的分类

局部变量

局部变量就是定义在代码块{}内部的
例如:

int main()
{
	int a = 10;//局部变量
	return 0;
}

在上面代码中变量a就是局部变量

全局变量

全局变量与局部变量正好相反,全局变量是定义在代码块外面的变量
例如:

int a = 100;//全局变量
int main()
{
	return 0;
}

这里的变量a就是全局变量了

全局变量和局部变量的辨析

在上面例子中,我们已经对于什么是全局变量,什么是局部变量有了一个初步地了解
那么下面一段代码,你能得出输出的结果是什么吗

int a = 100;//全局变量
int main()
{
	int a = 10;//局部变量
	printf("a=%d\n", a);
	return 0;
}

首先在原则上变量名不应该相互冲突以免造成误解,但是在全局变量和局部变量名字一样时,只需要记住一个道理:局部优先
在main函数中访问a时,采用就近原则,因此访问的是main中的a,相当于将全局作用域中的a屏蔽了
故最终打印的结果为:
在这里插入图片描述

变量的作用域和生命周期

作用域

一个变量的作用域通俗点来讲就是一个变量可以使用的一个范围

局部变量的作用域

局部变量的作用域就在其所在的局部代码块内部,一旦出了其所在的局部代码块,该变量就失去了其功能
当变量在所在的作用域时

int main()
{
	int a = 10;
	printf("a=%d", a);
	return 0;
}

所得到的结果:
在这里插入图片描述
当局部变量不在其作用域时

int main()
{
	{
		int a = 100;
	}
	printf("%d", a);
	return 0;
}

当运行这段代码时,会得到一下信息
在这里插入图片描述
当出现这段错误提示时,我们不难想到,由于该代码块的作用域仅限于大括号内部,当代码块执行完毕后,变量 a 就超出了其有效作用域范围,不再可见,故没办法再将其打印出来了。

全局变量的作用域

全局变量的作用域是整个程序,也就是在任何地方都可以访问全局变量。一旦定义了全局变量,它就可以被程序中的任何一个函数或模块使用。
例如
初学C语言必须知道的那点事儿_第1张图片
在这里插入图片描述

在这段代码中,我们可以看到,即使在不同的源文件中,全局变量依然可以被访问得到,当然前提是要用extern关键字声明g_val是外部变量。

生命周期

生命周期指的是程序中变量或对象存在的时间段,在此期间可以被引用和访问

局部变量的生命周期

一般来说,局部变量的声明周期为函数执行期间,在作用域结束时自动销毁。

int main()
{
	{
		int a = 100;
	}
	printf("%d", a);
	return 0;
}

同样这段代码,也可以理解为程序在执行到int a=100时,a变量被创建,在程序执行到打印语句时,此时已经出了a的作用域范围,a所占的内存空间已经被系统回收了,即生命周期结束,故无法访问a的值了。

全局变量的生命周期

之前已经提到全局变量的作用域是整个工程,由于进入主函数,程序开始执行,出主函数,程序结束,即主函数的生命周期就是程序的生命周期,而在主函数执行期间,全局变量可以被访问和使用,所以得出,全局变量的生命周期就是主函数的生命周期即程序的生命周期。

常量

常量的概念

常量是指程序中固定不变的值,它们在程序运行时无法改变。

常量的分类

字面常量

字面值常量是指在程序中直接表示的常量,如 3、100、‘a’、"abcd"等等都属于字面常量。

const修饰的常变量

这里说的常变量是指具有常属性的变量。
例如:

int main()
{
	const int a = 10;
	a = 10;
	return 0;
}

若要运行以上程序就会出现报错
在这里插入图片描述
这里就很好的说明了a在被const修饰后,a的值不能够再次被修改,即“常属性”。
虽然,a具有了常量的一些特征,但本质上还是一个变量
例如:

int main()
{
	const int n = 5;
	int arr[n] = { 0 };
	return 0;
}

这里要定义一个数组,而在定义数组大小的时候,[ ]内必须得是一个常量
若要运行这段代码这段代码,则会出现报错
在这里插入图片描述
这段报错则正好说明了const修饰的n并不属于常量。

#define定义的标识符常量
#define SIZE 10//#define定义的标识符常量
int main()
{
	int a = SIZE;
	int arr[SIZE]={0};
	return 0;
}

在运行这段代码时未出现任何问题,说明用#define定义的标识符确实是一个常量,要注意的是#define不只是能将一个标识符定义为一个数字,定义为一个字符、字符串都是可以的`,如下

#define a 'w'
#define b "acd"
枚举常量

枚举的意思就是一一列举,例如性别就可以列举为男性、女性、未知

enum Sex//enum为枚举关键字
{
	//列出了枚举类型的可能取值
	MALE,  
	FEMALE, 
	SECRET, 
};
int main()
{
	printf("%d\n", MALE);
	printf("%d\n", FEMALE);
	printf("%d\n", SECRET);
	return 0;
}

其中,枚举类型的每个可能取值都称之为枚举常量,每个枚举常量都代表这一个数,一般从0开始,从上到下依次递增。
运行以上代码可得
初学C语言必须知道的那点事儿_第2张图片
倘若试图修改其中某个枚举常量的值

enum Sex
{
	MALE,  
	FEMALE,
	SECRET, 
};
int main()
{
	MALE = 5;//尝试修改MALE的值
	return 0;
}

则会报错
在这里插入图片描述
倘若用枚举常量来定义一个数组的大小

enum Sex
{
	MALE,  
	FEMALE,
	SECRET, 
};
int main()
{
	int arr[FEMALE] = { 0 };//用FEMALE来定义一个数组的大小
	return 0;
}

程序正常运行。

你可能感兴趣的:(c语言,visualstudio)