1C语言学习记录,数据类型,如何定义变量,、变量的赋值,作用域,生命周期,运算符号

数据类型。

1、什么是数据类型?
数据类型描述了一个变量究竟存放着什么数据。

数据类型分为基本数据类型与非基本数据类型。
基本数据类型:char short int long float double。
非基本数据类型:数组、指针、结构体

2、研究一下基本数据类型在内存中占用的空间问题?
例子:假设有一个整型变量,那么这个变量在内存中占用多少个字节?
看这个变量对应的数据类型是占用多少个字节。

等价于:
有以下的程序,请问在运行程序的过程中占用内存多少个字节?

int main(int argc,char *argv[])
{
	int a;
	return 0;
}

sizeof() -> 计算内存占用字节的大小。
sizeof(char) -> 计算一个char类型的数据在内存中占用多少个字节数。

#include <stdio.h>

int main(int argc,char *argv[])
{
	printf("sizeof(char) = %ld\n",sizeof(char));//1
	printf("sizeof(short) = %ld\n",sizeof(short));//2
	printf("sizeof(int) = %ld\n",sizeof(int));//4
	printf("sizeof(long) = %ld\n",sizeof(long));//8
	printf("sizeof(float) = %ld\n",sizeof(float));//4
	printf("sizeof(double) = %ld\n",sizeof(double));//8
	
	return 0;
}

结论: 基本数据类型占用空间的大小由编译系统来决定的。

如何定义变量?

1、定义公式: 数据类型 变量名

数据类型: 从基本数据类型中选择,也可以从非基本数据类型中选择。
变量名:有一套规则。
1)只能由字母,数字,下划线组成。 int a+5
2)不能以数字开头。 int 5_a
3)不能与系统的关键字重名 int If (对) int if (错)

例子1: 定义一个整型变量,名字为x。
int x;

例子2: "int x"这句话是什么含义?
在内存空间中连续申请4个字节的空间,然后使用变量x间接访问这片内存空间。

int main(int argc,char *argv[])
{
int x; -> 申请了连续4个字节空间。
return 0; -> 程序结束就会释放空间。
}

2、内存分配原则? -> 连续空闲不确定。
1)在分配内存时,内存地址一定是连续。
2)在分配内存时,一定是空闲。(之前的变量申请过的空间就不会再被申请到)
3)分配内存时,位置是不确定。

变量的赋值,作用域,生命周期。

1、变量的赋值。
使用"=“来对变量进行赋值,”=“的作用把”=“右边的值赋值给”="左边的值。

1)定义变量的同时初始化。
int x = 100; -> x不会出现随机值。

2)先定义,后初始化。
int x; -> x = 随机值
x = 100; -> x = 100

2、变量的生命周期与作用域。
生命周期:这个变量从什么时候开始出现在内存空间到什么时候从内存空间中释放这个过程。
作用域:在程序中,这个变量能够作用到的地方。

局部变量 Vs 全局变量

1)什么是局部变量?什么是全局变量?
在程序函数体内部定义的变量就是局部变量,在函数体外定义的变量就是全局变量。

int x; -> 全局变量
int main(int argc,char *argv[])
{
int a; -> 局部变量
}

2)两者在内存空间中申请的位置区别?
局部变量申请的空间位置,一定在栈区。
全局变量未初始化过就是在bss段,已初始化过就是在data段。

int c = 10; -> c在data段,10是常量区
int d; -> d在bss段

int main(int argc,char *argv[])
{
int a = 100; -> a在栈区 100在常量区
int b; -> b在栈区
return 0;
}

3)初始化值
局部变量: 随机值
全局变量: 0

4)生命周期
局部变量在函数中定义时开始,在定义的函数返回时,就会释放这个空间。
全局变量一开始就会申请,等到程序结束才会释放。

5)作用域
局部变量:只能在定义该变量的那个函数中使用。
全局变量:整个程序中所有的函数都可以使用。

思考题?
1、形式参数"int x"是属于局部变量还是全局变量?
属于局部变量,所以需要申请空间,还有就是在函数结束时会释放。

int fun(int x) //x = 10
{
x -> 就是局部变量
int y;
}

int main()
{
fun(10);
}

2、能不能在不同的函数中定义相同的变量名?
可以。

int fun()
{
int y;
}

int main()
{
int y;
}

3、全局变量可以跟局部变量同名吗?
可以重名。如果重名,打印出来的值就是局部变量。

4、全局变量作用域只能往下,不能网上。

练习4: 请求出以下程序的结果。 (考点: 局部变量的生命周期)

int my_fun(int c)
{
	c = c/5;
	return c;
}

int fun(int a,int b)
{
	int c;
	c = a + b;
	my_fun(c);
	return c;
}

int main(int argc,char *argv[])
{
	int a = 10,b = 5;
	int ret = fun(a,b);	
	printf("ret = %d\n",ret); //15
	return 0;
}

运算符号。

" + - * / % = & && | || == != ++ – += -= *= /= %= "

1)把浮点型赋值给整型变量,那么精度就会降低。(把小数点后面的数据弄丢了)
2)

int c = 5/2;
printf("c = %d\n",c);//2
	
float e;
e = 5/2;
printf("e = %f\n",e);//2.000000
	
float f;
f = 5.0/2;
printf("f = %f\n",f);//2.500000
	
float g;
g = 5/2.0;
printf("g = %f\n",g);//2.500000 (对)
						 //2.000000 (错)
float h;
h = 5.0/2.0;
printf("h = %f\n",h);//2.500000
	
int i;
i = 5.0/2.0;
printf("i = %d\n",i);//2

3)%两边不可以由小数点。

4)& -> 位与运算

5&6

5 -> 0101
6 -> & 0110

   0100  -> 4

&& -> 逻辑与运算 -> 非0即真

5&&6

5 -> 非0 -> 真
6 -> 非0 -> 真

| -> 位或运算

5|6

5 -> 0101
6 -> | 0110

   0111  -> 7

||

5||6

5 -> 非0 -> 真
6 -> 非0 -> 真

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值