笔记1:C语言变量与常量
2017-12-03 16:06
197 查看
一.变量
1.1普通局部变量和全局变量的对比
1.定义同时没有初始化,则局部变量的值是随机的,而全局变量的值是默认为0的。2.使用范围上:全局变量具有文件作用域,而局部变量只有代码块作用域。
3.生命周期上:全局变量是在程序开始之前的初始化阶段就诞生的,到整个程序结束退出的时候才死亡;而局部变量在进入局部变量所在的代码块时诞生,在该代码块退出的时候死亡。
4.变量分配位置:全局变量分配在数据段上,而局部变量分配在栈上。
基本概念:
作用域:起作用的区域,也就是可以工作的范围。
代码块:所谓代码块,就是用{ }扩起来的一段代码。
数据段:数据段存的是数,像全局变量就存在数据段。(注意:全局变量才算是程序的数据,局部变量不算程序的数据,只能算是函数的数据)
代码段:存的是程序代码,一般是只读的。
栈(stack):先进后出。C语言中的局部变量存在栈中。
注意:以下代码编译会出错未定义i,i是局部变量,工作范围是代码块(范围为{ })。
for() { int i = 1; } printf("i:%d\n",i);
1.2静态局部变量和全局变量
1.静态局部变量和普通局部变量不同。静态局部变量也是定义在函数内部,静态局部变量定义时前面加上static关键字来标识,静态局部变量所在的函数在调用多次时,只有第一次才经历变量定义和初始化,以后多次在调用时不再定义和初始化,而是维系之前上一次调用时执行后这个变量的值。本次接着来使用。2.静态局部变量在第一次函数被调用时创造并初始化,但在函数退出时它并不死亡,而是保持其值等待函数下一次被调用。下次调用时不再重新创造和初始化该变量,而是直接用上一次留下的值为基础来进行操作。
3.静态局部变量的这种特性,和全局变量非常类似。它们的相同点是都创造和初始化一次,以后调用时值保持上次的不变。不同点在于作用域不同。
1.3register局部变量
寄存器局部变量,和普通局部变量差不多。C语言中最快的变量,C语言承诺register变量是放在寄存器中的,普通局部变量放在内存中的。1.4全局变量
全局变量的定义和初始化是在main函数运行之前发生的1.局部变量能不能跨文件使用?
不能,因为局部变量属于代码块作用域。他的作用域只有他定义的那个函数内部实现。
2.静态局部变量能不能跨文件使用?
不能。因为本质还是局部变量
讨论跨文件使用问题,只用讨论全局变量和函数就可以了。
1.4.1静态全局变量(解决跨文件引用变量问题)
静态全局变量就是用来解决重名问题的。静态全局变量定义时在定义前加static关键字,告诉编译器这个变量只在当前本文件内使用,在别的文件中绝对不允许使用。1.4.2跨文件引用全局变量
函数和全局变量在C语言中可以跨文件使用,也就是说他们的连接范围是全局的,具有文件连接属性。二.常量
程序运行过程中不会改变的量。常量的值在运行之前初始化的时候给定一次,以后都不会变了,以后一直是这个值。2.1#define定义的常量
2.2const关键字
const和指针结合,共有四种形式const int *p;
p是一个指针,指针指向一个int型整数,p指向的是个常量
int const *p;
p是一个指针,指针指向一个int型整数,p指向的是个常量
int *const p;
p是一个指针,指针指向一个int型整数,p本身是常量,p所指向的是个变量
int *const *p;
p是一个指针,指针指向一个int型整数,p本身是常量,p所指向的是个常量
结论和记忆方法:
1.const在*前面,表示const作用于p所指向的量。所以这时候p所指向的是个常量
2.const在*后面,表示p本身是个常量,但是p所指向的不一定是常量
const型指针有什么用?
char *strcpy(char *dst,const char *src);
字符串处理函数strcpy,它的函数功能是把 src指向的字符串,拷贝到dst中。
2.3枚举常量
枚举常量是宏定义的一种替代品,在某些情况下会比宏定义好用。相关文章推荐
- 【黑马程序员】C语言学习笔记之常量和变量(四)
- 学习笔记---C语言中全局变量,变量,常量的定义与使用
- C语言学习笔记1--符号常量、变量、运算
- 黑马程序员之--C语言学习笔记之变量、常量和注释
- C语言学习笔记(二)--数据类型、常量和变量简介
- PHP移动互联网开发笔记(2)——变量及常量
- php笔记之魔法常量和超全局变量
- C语言学习笔记 (001) - 常量指针与指针常量的区别(转帖)
- Kotlin学习笔记2 : 变量常量与基本数据类型
- Java 基础笔记之二 变量和常量有什么区别
- Swift学习笔记(二)——常量与变量
- C#学习之路,学习笔记 2.6 变量的命名规则、常量 及 关键字
- c#学习笔记一:变量、常量、预定义数据类型
- JAVA入门笔记1:基本语法、常量、变量
- 【慕课笔记】第二章 变量和常量 第6节 JAVA中变量的使用规则
- 【慕课笔记】第二章 变量和常量 第8节 JAVA中的强制类型转换
- c语言中的常量,变量
- 【C语言】C语言常量和变量
- 【学习笔记】【C语言】变量的内存分析
- linux_C一站学习--学习笔记(一)程序的基本概念;常量、变量和表达式;简单函数