3.C变量

/*
变量是程序可操作的存储区的名称,c中每个变量都有特定的类型,类型决定了变量存储的大小和布局,
该范围内的值都可以存储在内存中,运算符可应用于变量上。

变量的名称可以由字母、数字、下划线组成。但是开头必须要是字母或者下划线。大写和小写不同,C对大小写是敏感的。
*/

//c中变量的定义
/*
变量的定义是告诉编译器在何处创建变量的存储,以及如何存储。定义格式如下
type variation1,variation2,······

这里的type必须是有效的C数据类型,可以一次定义多个变量,多个变量之间用,分割
举个栗子:
	int i,j,k;
	char c,ch;
	float f,salary;
	double d;
	
当然变量也可以在声明的时候被初始化,也就是赋给一个值
type variation=value;
举个栗子:
	int d=3,f=5;  定义并初始化d和f
	byte z=22;	定义并初始化z
	char x='X';	 变量的值为'X'
*/

//c语言中变量的声明
/*
变量声明向编译器保证变量以指定的类型和名称存在,这样编译器在不知道变量的具体细节的情况下也可以继续编译
变量声明只在编译时有它的意义,在程序连接时,编译器需要实际的变量声明。
变量的声明有实际两种情况:
1.需要建立存储空间的,如int a,在声明的时候就已经建立的存储空间
2.不需要建立存储空间的,如extern int a,使用extern关键字声明而不定义它,使得变量a可以在别的文件中定义
除非有extern关键字,否则都是变量的定义
extern int i; 声明,不是定义
int i; 声明,也是定义
*/


#include <stdio.h>
//变量声明
extern int a,b;
extern int c;
extern float f;
int main01()
{
	//变量定义
	int a,b;
	int c;
	float f;
	//初始化
	a = 10;
	b = 20;
	c = a+b;
	f = a+b;
	printf("a=%d,b=%d\n",a,b);
	printf("c=%d\n",c);
	printf("f=%f\n",f);
}
/* 
a=10,b=20
c=30
f=30.000000
*/

//C中的左值和右值
/*
通俗的话将,能被赋值的就叫做左值。比方说int a; 
这个a就可以被赋值,那么a就是左值

只能赋值给别人的值叫做右值,比方说20,'a',这些常量只能赋值给别人
不可能出现20=xxx,这种情况

左值可以出现在=的两边,既可以被赋值,也可以给别的变量的赋值
右值只可以出现在=的右边,只能将自己赋值给别人

*/



//笔记
/*
extern int a; //声明一个全局变量a
int a; //定义一个全局变量a
extern int a=0; //定义一个全局变量a并赋予初值,一旦赋予初值,必定是定义,会被分配存储空间
int a=0; //定义一个全局变量a,并赋予初值

声明之后不能直接使用这个全局变量,必须定义之后才能使用
第四个等于第三个,都是定义一个可以使用的全局变量,并给予初值

尽管很相似,但还是有很多不同的,声明可以多次,但是定义只能出现一次。
不管是int a;还是int a=0;都是只能出现一次的,而extern int a;可以出现多次
当你要引用一个全局变量的时候,必须要使用extern int a;
因为extern省略了的话,就变成了int a,这是一个定义而不是声明
*/


/*
1.当需要保存数据的时候,使用左值
2.当需要读取数据的时候,使用右值
左值可以当右值使用
int n=1;  //这里的n是左值
int m;
m = n+2; // 这里的n是右值
右值不可能转化为左值
*/

/*
变量的内存寻址
1.内存地址由大到小,优先分配内存地址比较大的字节给变量,所以变量越先被定义,内存地址就越大
2.变量地址的获取方式,&变量名
3.输出地址的方式:%p
*/
int main02()
{
	int a=1;
	int b=1;
	printf("&a=%p,&b=%p\n", &a,&b);  //&a=0061FF2C,&b=0061FF28,可以看到a的内存地址比较大
	return 0;
}
//变量一定要初始化才可以使用,因为在C语言中没有初始化的值默认是一个很大的值
int main()
{
	int a;
	printf("a=%d\n", a);  //a=4194432
	return 0;
}

  

猜你喜欢

转载自www.cnblogs.com/traditional/p/9463608.html