数据类型及常量和变量的一些基础知识

数据类型及常量和变量的一些基础知识,第1张

数据类型及常量变量的一些基础知识

数据类型

数据类型,看它名字我们就可以知道它的大概意思,没错,就是数据的类型。

比如10,它是一个整数,所以我们称它为整型,在c语言中用int表示

再入10.5,它是一个小数,我们在c语言中称它为浮点型,用float及double表示。

还有比如一个字母a,它是一个字符,我们在c语言中称它为字符型。可以用char表示。

.....等等还有其他的一些,但我们在这里能大概了解数据类型的意思就可以了

我先列举一下常用的数据类型

char 字符数据类型   (例如a,b,c,d,A,*,/等这样的形式的)
short 短整型  (比下面的整形表示的数范围较小的整形,范围-2^15~2^15-1)
int 整形  (表示更长的整形 ,范围-2^31~2^31-1)
long int长整型 (比int更长一些)
long long int 更长的整形 (比long int 更长,具体范围我也不清楚了哈)
flaot 单精度浮点型
double 双精度浮点型(双精度浮点数所能表示的小数点比单精度浮点型更多)

既然他们所表示的范围或类型不同,那它们应该所占的内存空间大小也应该不同吧?

c语言提供了一个函数sizeof,该函数的定义是用来计算对象所占的字节个数。

既然我们有了这个便利的函数,那我们来验证吧。

	printf("char: %dn", sizeof(char));
	printf("short: %dn", sizeof(short));
	printf("int: %dn", sizeof(int));
	printf("long int: %dn", sizeof(long int));
	printf("long long int: %dn", sizeof(long long int));
	printf("float: %dn", sizeof(float));
	printf("double: %dn", sizeof(double));

输出结果如下:

 

我们发现,字符型数据占的字节最小是1,最大的double和long long int类型,占的是8个字节

这个时候细心的同学可能发现,long int范围明明比int大,为什么和int占的字节数一样的?

因为c语言标准规定:

只要sizeof(int)>=sizeof(long)即可,并没有严格规定long int 必须是几个字节,但规定了long long int是8个字节

刚才那个结果实在32位平台下测试的,我们在64位平台上测试,得到的是同样的结果:

既然刚才我们提到了字节,那就不得不说明一下计算机中的单位了

计算机中最小的单位是bit,中文名字比特位。

比它大一级的就是byte,即我们所说的字节。1byte=8bits。

再往后是KB。1KB=1024byte。

再往后是MB。1MB=1024KB。

后面的下一级与上一级都是1024的关系

GB,TB,PB.......... 

变量

变量可以分为全局变量和局部变量。

定义变量:类型名(我们以上讲的数据类型)+变量名(可以自己定义,但是不能与关键字同名,后面会说关键字);

例如,我想定义一个整数1,它的名字是a,我们便可以写成如下形式。

int a=1;(int数据类型名字,a是自己起的名字)

同样的,我们想定义一个小数1.5,叫它为b吧,可以写成下面的样式。

float b=1.5;

double b=1.5;

因为float,double都是表示浮点型,所以都可以用来顶定义。

先来简单说一下局部变量。抽象点来说,就是定义在大括号内部的变量。

例如:

int main()
{
int a = 1;
printf("%d",a);
}

这样我们就成功定义了一个局部变量。屏幕输出的结果是1.

再说一下全局变量,就是定义在所有大括号外部的一个变量。

例如

int a = 2;
int main()
{
printf("%d",a);
}

这样就成功定义了一个全局变量,屏幕上输出的结果为2.

但是这个时候存在一个问题,如果全局变量和局部变量同名,程序会执行全局变量还是局部变量呢?

我们可以看以下内容

#include
int a = 2;
int main()
{
	int a = 1;
	printf("%d", a);
}

屏幕上输出结果是1.

我们在此可以得出结论:局部变量的名字和全局变量的名字冲突的情况下,局部变量优先执行

变量的使用

问题:用户输入两个数,求出这两个数之和

我们可以想到,既然输入两个数,那么应该可以定义存放这两个数的变量,分别为num1和num2吧。定义好了,怎么让用户输入呢,c语言提供了一个scanf函数,可以获取用户输入的数据,并存放到相应的变量中。

格式如下:scanf("%d%d",&num1,&num2);

双引号里面的是数据类型的一种表示,%d表示整型,%f表示单精度浮点型,%lf表示双精度浮点型等等,后面的是对相应变量的输入。&num1是把用户输入的值给存到num1中,num2亦是如此。

输入好之后,既然要求他们之和,应该执行相加的 *** 作吧,就是num1+num2;

既然加起来了,那我们该放到哪里呢,这是我们需要在定义一个变量比如sum吧。

int sum;

sum=num1+num2;

最后将其输出出来就可以了。

完整代码如下:

#include
int main()
{
	int num1;
	int num2;
	int sum;
	scanf("%d%d", &num1, &num2);
	sum = num1 + num2;
	printf("%d", sum);
	return 0;
}

关于变量的作用域和生命周期

作用域:简单来说,就是一个变量哪里可以使用,那里就是他的作用域

文字抽象,我们喜欢用例子来帮助大家理解

先来说局部变量的作用域:

int main()
{
{
int a=100;
printf("%d:,a); 
}
printf("%dn",a);//这里出错
}

我们发现代码出错了,但调试的时候发现,第一个printf可以正常输出,第二个printf却显示变量未定义,这个时候可能我们就有点理解了,a的作用域仅仅局限于它临近的那一个大括号里面,即第三行和第六行之间是它的作用域。

全局变量的作用域

全局变量的作用域适用于整个工程的,整个工程!可能没什么概念,就是你新建的那个项目里面无论创多少个源文件,那个全局变量作用域都可以在所有文件里面使用。

我们先来看例子:

我先创好了两个文件

我在源1.cpp里面创建了一个全局变量a。

 既然全局变量的作用域用于整个工程,那我在源2来输出这个a

 

 

出错了?注意看下面那个未声明,怎么回事啊,不是说好的作用域是整个工程啊,为什么啊这是?

原来,我们需要一个函数,这个函数是来调用声明外部符号的,extern。

也就是我们想在别的文件用这个全局变量,我们必须使用extern这个函数

具体怎么用呢,看下图

这个时候他成功运行了!

 

注意:extern 引用了全局变量之后不能再赋值

只能 extern int a;

而不能extern int a =4;

生命周期

理解了作用域这个也没什么可以说的,都能理解了

变量的生命周期是指变量的创建到变量的销毁之间的一个是时间段


局部变量生命周期:进入作用域生命周期开始,出作用域生命周期结束
全局变量的生命周期:整个程序的生命周期

常量

常量分为四种:

1.字面常量

2.const修饰的常变量

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

4.枚举常量

1.字面常量

我们给a赋值是,比如10,3.14

一个字母a我们叫做字符常量

"abcd"字符串常量

上面那些直接写出来的都是字面常量

2.const修饰的[常变量]

const(常属性)是一个关键字。

有时候我们不想定义的变量被修改,可以用const

例如

int num=1;
num=2;
printf("%d",num);

最后输出结果是2,说明我们定义的变量被修改了

但是如果加上const

const int num = 1;
num =2;
printf("%d",num);

这个时候程序报错了

 错误:不能给常量赋值,说明此时它已经被修饰成常属性的变量

那被const修饰的变量直接叫常量就行了,为什么叫所谓的常变量呢?

先说一个知识吧,就是在创建数组中,数组的大小就是括号里面的数不能是变量;

例如,创建一个数组:

int arr[5];//可以创建

但是如果

int n=5;

int arr[n];程序却报错了

 但是我们这个时候如果用const修饰呢?按理来说,修饰之后就不会变了,相当于一个常属性了。但是编译器此时还是报相同的错误

这说明它的本质还是变量,但具有常量的属性

便称他为常变量。

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

#define M 100[M是标识符的名字]
int arr[M]={0};//可以执行
说明M就是一个常量

4.枚举常量

枚举,说白了就是一一列举,把所有可能情况全部列出来.

例如,性别:男或女,三原色:红色,绿色,蓝色

星期:有周一,周二....一直到周日

这些可以一一列举的量,我们可以用枚举常量全部列出来

这时c语言提供了一个枚举关键字enum。

用法如下,还是用例子解决:

比如我们想列举性别

可以这样写:

enum Sex
{
male,
female
};

注意每个例子后面是逗号,最后一个例子后面不加符号

再如三原色:

enum Color
{
RED,
GREEN,
BLUE
};

 它们怎么表示常量的呢?

我们可以以下 *** 作:

printf("%d%d%d",RED,GREEN,BLUE);

输出结果为012.

同理,性别我们也做同样的 *** 作

printf("%d",male,female);

得到结果为01。

由此我们可知:枚举常量中第一个量是从0开始,向下每次递增加1的。

以上是关于数据类型及常量和变量的一些基础知识,如果有困惑,欢迎私信问我哦。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5670193.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存