代码如下:
#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 就超出了其有效作用域范围,不再可见,故没办法再将其打印出来了。
全局变量的作用域是整个程序,也就是在任何地方都可以访问全局变量。一旦定义了全局变量,它就可以被程序中的任何一个函数或模块使用。
例如
在这段代码中,我们可以看到,即使在不同的源文件中,全局变量依然可以被访问得到,当然前提是要用extern关键字声明g_val是外部变量。
生命周期指的是程序中变量或对象存在的时间段,在此期间可以被引用和访问
一般来说,局部变量的声明周期为函数执行期间,在作用域结束时自动销毁。
int main()
{
{
int a = 100;
}
printf("%d", a);
return 0;
}
同样这段代码,也可以理解为程序在执行到int a=100时,a变量被创建,在程序执行到打印语句时,此时已经出了a的作用域范围,a所占的内存空间已经被系统回收了,即生命周期结束,故无法访问a的值了。
之前已经提到全局变量的作用域是整个工程,由于进入主函数,程序开始执行,出主函数,程序结束,即主函数的生命周期就是程序的生命周期,而在主函数执行期间,全局变量可以被访问和使用,所以得出,全局变量的生命周期就是主函数的生命周期即程序的生命周期。
常量是指程序中固定不变的值,它们在程序运行时无法改变。
字面值常量是指在程序中直接表示的常量,如 3、100、‘a’、"abcd"等等都属于字面常量。
这里说的常变量是指具有常属性的变量。
例如:
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 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开始,从上到下依次递增。
运行以上代码可得
倘若试图修改其中某个枚举常量的值
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;
}
程序正常运行。