C learning_2

目录

1.数据类型       

2.数据类型的大小

3.变量和常量

4.变量的命名 

5.局部变量和全局变量

6.printf和scanf的使用方法

7.变量的使用以及scanf使用问题

8.变量的作用域和生命周期

9.常量


1.数据类型       

        在计算机中,不同的数据在内存中占用不同大小的存储单元,而且它们所能表示的数据的取值也不同,为了方便我们在计算机中存入不同数值的数据,于是引入了数据类型。

例如:20   - 整数 - 整型   - int
           25.2 - 小数 - 浮点型 - flaot、double

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

在C99中还引入了 _Bool - 布尔类型 long doubel - 长双精度浮点型

2.数据类型的大小

        在现实生活中,我们放书都要放在某个格子里面。数据也是如此,数据想要存储,就需要在计算机的内存中开辟一段空间,至于开辟空间的大小,就取决于该数据存储时的数据类型。

"%d" - 以十进制的形式打印数据。

sizeof - 操作符 - 计算数据类型在计算机中所占内存空间的大小 - 单位是字节

#include 
int main()
{
    printf("%d\n", sizeof(char));//1
    printf("%d\n", sizeof(short));//2
    printf("%d\n", sizeof(int));//4
    printf("%d\n", sizeof(long));//4
    printf("%d\n", sizeof(long long));//8
    printf("%d\n", sizeof(float));//4
    printf("%d\n", sizeof(double));//8
    printf("%d\n", sizeof(long double));//8
    return 0;
}

        计算机中的单位:

​
//计算机中的单位:
	/*
		bit 比特位
		Byte 字节 = 8 bit
		KB = 1024 Byte
		MB = 1024 KB
		GB = 1024 MB
		TB = 1024 GB
		PB = 1024 TB
	*/
//计算机识别的是 二进制 0/1
//而十进制则是  0/1/2/3/4/5/6/7/8/9

​

这里很奇怪,为什么sizeof(int) 和 sizeof(long)大小一样呢?难道整型和长整型是一样的吗?

其实C语言标准规定:

        sizeof(int) <= sizeof(long)

        这里取4是由于我们当前是32位平台,在64位平台上它就是8啦。

这里我们详细了解一个变量创建的过程

C learning_2_第1张图片

3.变量和常量

        常量:在程序中不能改变的其值的量。按照类型划分有以下几种:整型常量、实型常量、字符型常量、字符串字面量、枚举常量。

        变量:变量不同与常量,其值在程序执行的过程是可以变化的。

定义变量的形式为:类型 变量名    

int mian()
{
	//定义变量的形式为:类型 变量名
	//定义年龄变量
	int age;
	//定义体重变量并赋予初值
	float weight = 66.6f;
	//这里 66.6f 带 f 是因为 66.6 在编译器中默认是double类型,加上f后就成为float类型
	return 0;
}

4.变量的命名 

1.只能由字母(包括大写和小写)、数字和下划线( _ )组成。

2.不能以数字开头。

3.长度不能超过63个字符。

4.变量名中区分大小写的。

5.变量名不能使用关键字。

5.局部变量和全局变量

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

此时输出的值为多少呢?100?还是10?

C learning_2_第2张图片

 输出结果为10,printf优先选择最近的变量a的值,可以理解为"局部遍历优先原则"。

6.printf和scanf的使用方法

scanf 和 printf,库函数 - C语言编译器提供的现成的函数,直接可以使用。使用的时候要包含头文件stdio.h。
        1.scanf的作用是输入数据,数据从键盘读取到内存中。

函数原型是:  int scanf( const char *format [,argument]... );
        2.printf的作用是输出数据,数据从内存打印(输出)到屏幕上

函数原型是:int printf( const char *format [, argument]... );

这里的const char *format就是格式,以下是常见的格式:

//%c - 字符
//%d - 整型
//%s - 字符串
//%f - 单精度浮点数
//%lf - 双精度浮点数
//%p - 地址的打印
#include

int main()
{
	//输入并输出一个整数
	int a = 0;
	scanf("%d", &a);// - 取地址a - 取出a的地址
	//%d - 输入的格式
	//&a - 这里需要的是地址,表示存放在哪里

	printf("%d", a);
	//%d - 输入的格式
	//a - 这里变量,表示从内存中拿到数据

	//输入并输出一个字符
	char ch = 0;
	scanf("%c", &ch);
	printf("%c", ch);
    return 0;
}

7.变量的使用以及scanf使用问题

先来看一段代码

#include
int main()
{
	//写一个代码,求两个整数的和
	int num1 = 0;
	int num2 = 0;
	int sum = 0;
	//输入两个整数的和
	scanf("%d %d", &num1, &num2);
	sum = num1 + num2;
	printf("%d\n", sum);
	return 0;
}

 此时程序出现错误了,但是我们的代码没有什么问题呀!为什么呢?这是因为在vs2022中该函数不安全,为了代码的跨平台性,我们仍然要使用scanf函数。

解决办法:

        1.#define _CRT_SECURE_NO_WARNINGS 1

        2.#pragma warning(disable:4996)

输入上面两个任何一个就可以使程序正常运行了。

C learning_2_第3张图片

8.变量的作用域和生命周期

作用域
        作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的而限定这个名字的可用性的代码范围就是这个名字的作用域。
        1. 局部变量的作用域是该局部变量所在的局部范围。

#include
int main()
{
	{
		int a = 100;// - 局部变量
		printf("%d", a);//a在其作用域内可正常使用
	}
	//printf("%d", a);
	//此时程序报错:error C2065: “a”: 未声明的标识符
	//证明a变量出了作用域就不可以使用 - a在出作用域后就被释放了
	//当我们把修改一下:
	/*
		int a = 100;
		{

		}
		printf("%d", a);
	*/
	//此时变量a又可以使用了
    return 0;
}

        2. 全局变量的作用域是整个工程。

                不同的源文件定义的变量一定不要重名。

#include

int a = 20;//全局变量

extern int b;//声明外部文件的变量

void test()
{
	//test函数使用变量a - 可以打印a的值
	printf("2--->%d", a);
}

int main()
{
	//main函数使用变量a - 可以打印a的值
	printf("1--->%d", a);
	test();//调用自己创建的函数test

	//调用新建源文件test.c的变量b
	printf("test.c-->%d", b);
	//此时也报错了,是不是不能用呢
	//其实不是 - 此时错误是error C2065: “b”: 未声明的标识符 -\
	而不是未定义的标识符 - 说明变量已经存在 - 只需声明即可 - 声明外部符号\
	extern - 声明外部文件的关键字
	//此时就可以运行出b的值了
    return 0;
}

生命周期
        变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
        1. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。

#include
int main()
{
	{
		int a = 1;
		int b = 2;
		int c = a + b;
		printf("%d", c);
		//在这范围内是变量a,b,c的生命周期
	}
	//执行顺序是:
	
	//进入主函数
 
	//创建变量a,为其分配内存空间,存放数据1
	//创建变量b,为其分配内存空间,存放数据2
	//创建变量c,为其分配内存空间,存放数据a+b
	//打印
	//销毁变量a,b,c的空间,a,b,c就不能使用 - 把空间还给操作系统

	//结束main函数
	
	//变量创建的本质:在内存中开辟一段空间,存放数据
    return 0;
}

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

#include 

int a = 0;//全局变量

int main()
{
	//此时变量a的生命周期就是程序的生命周期
	//两者共存亡
    return 0;
}

9.常量

C语言中的常量分为以下以下几种:

        1.字面常量

3、3.14、'a'、"abcdef"

        2.const 修饰的常变量

#include
int main()
{
	//a是变量
	//int a = 3;
	//const修饰常变量a - a具有常属性 - 不能改变 -\
	本质还是变量
	const int a=3;
	printf("%d\n", a);
	//a = 10;//error
	//此时报错:左值指定 const 对象
	printf("%d\n", a);

	int n = 10;
	int arr[n];
	//error
	//数组 arr[] 的[]内容必须是常量表达式或者常量

	const int n = 10;
	int arr[n];
	//error
	//数组 const修饰的仍然是变量 - 常变量

	return 0;
}

        3.#define 定义的标识符常量

#include

//#define 定义的标识符常量
#define SIZE 10

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

        4.枚举常量

#include
//枚举常量
//枚举 - 一一列举
//生活中有些值是可以意义列举的
//三原色:红、绿、蓝

enum COLOR
{
	//列举了枚举类型enum COLOR的可能取值
	RED,
	GREEN,
	BLUE
};
int main()
{
	//RED = 5;//不可修改 - 枚举常量
	printf("%d", RED);//0
	printf("%d", GREEN);//1
	printf("%d", BLUE);//2
	return 0;
}

你可能感兴趣的:(初识C语言,c语言)