EDA365电子论坛网
标题:
C语言的变量
[打印本页]
作者:
helendcany
时间:
2016-7-13 14:54
标题:
C语言的变量
1.
1 P) A2 d* a, X7 e
变量
6 m" l4 I" g" O) \$ ?7 q
1)
! D+ h8 Z. B2 m {8 i; u
格式
: _, R: ]" h" g+ b9 d
[存储类型] 类型说明符 [修饰符] 标识符 [=初值] [,标识符[=初值]]…
- F5 A. P: S2 M' ]
(1)类型说明符
# T: [/ G5 G2 Z R8 O
对于数字与字符,其类型共有9种:char、unsigned char、int、unsigned、long、unsigned long、float、double、long double。
4 h' X$ k2 |0 G- N* E1 Q# I- u
void类型,在具体化时可以用类型强制来指定类型说明符中的任意一类。
" `8 ~9 w7 N) N
通过typedef定义的类型别名。为了增强程序的可读性和移植程序时的方便,C语言允许用户为C语言固有的类型用typedef起别名。格式如下:
3 F6 F; u% v1 q
Typedef C固有的简单类型或复合类型
+ q& s7 L% W& ~
别名标识符;
, ` E4 S( u7 B$ {( e4 O1 O0 q
用别名代替原来的类型,在说明中用作类型说明符。别名一般用大写字符,例如:
" x, p; k/ O) r; T V
Typedef long BIG
' e; _! z; c# [) T" W
BIG x=80000
9 C; _& m, j! H. w A% n
(2)标识符
7 W( }* C: n* ?) O5 _
变量,是不带“#”的标识符。编译器为变量自动分配内存。
0 Y8 u+ m+ A* c
指针,是带有“#”的标识符。指针的内容必须是地址。编译器为指针自动分配内存。
4 d* _2 l, L& z) S
注意,指针标识符是不带“#”的标识符部分。指针说明中的类型说明符、存储类型和修饰符是指针指向对象的类型。一般来说,指针是变量,即指针指向的对象是变量。变量指针的类型可以是void。例如:
8 d; p$ T" A" I4 U; j# K, H
extern int const #count ;count是指针,而且是外部存储类型的整型变量
$ j. f4 ]; [0 ]# T* ]
(3)存储类型
6 N+ V# H4 C+ @ r
存储类型指定被说明所在内存区域的属性。
4 Y& V; ^3 n% Q& L0 P
auto——自动存储类型,是局部变量,是在函数内定义的变量且仅在该函数内是可见的,放在内存的栈中。其存储区随着函数的进入而建立,随着函数的退出而自动放弃。在函数中说明的内存变量,凡未加其他存储类说明的都是auto类型。每次调用该函数时,都需要重新在堆栈中分配空间。
, p$ A' W% _# k1 T
resister——寄存器存储类型,将使用频繁的变量放在CPU的寄存器中,需要时直接从寄存器取值,而不必再到内存中去存取,以求处理的高速。
2 f2 [: v1 r' ~7 Q$ v R1 ~( O
extern——外部存储类新星,表明该变量是外部变量,是在函数外部顶一顶变量。其作用域为从变量的定义开始到本程序文件的末尾。在作用范围内,外部变量可以是被程序中的各个函数所用。编译时外部变量被分配在静态存储区。外部变量能费用被存取,由该外部变量定义性说明与使用它的函数之间的位置关系来决定。如果程序中只有一个文件,则在定义了外部变量之后,使用该外部变量的函数可直接存取;如果程序中有多个文件,则在非该变量的定义文件中要使用它时,必须先加引用性说明,然后才能使用。
l2 I( [7 z; U" }. _7 W. Q
其引用性说明格式如下:
# O- x3 v7 h* c0 q1 g
extern 类型说明符 [修饰符] 变量名[,变量名]…;
7 |0 X/ N2 u% O$ U
在C语言中,与外部变量对应的还有内部变量,在函数内部定义性说明的变量都是内部变量,如前面的auto和register存储类型变量。内部变量只能在唉函数内部进行存取。
! e2 W" _/ c T, v) t- A/ ]. ^$ C
static——静态存储类型,分为内部静态和外部静态2种。在函数内部定义变量并说明为静态存储类的是内部静态变量,在离开这个函数到下次调用之间内部静态变量的值保持不变。内部静态变量在程序全程内存在,但只能在本函数内可存取。在函数外部定义变量并说明为静态存储类型的是外部静态变量。外部静态变量在程序全程内存在,但子啊定义它的范围以外,也是隐蔽起来的,是不可用的。对于只有一个源文件的程序来说,如果在文件开始定义的外部变量,加与不加static是一样的。
5 Q0 H6 W" Y+ \. j! ~8 }( e# E
赋初值部分
) h5 T, K3 t7 i' v1 \
若初值缺省,则auto存储类型和resister存储类型的变量为随机值;static存储类型的变量被编译器自动清0;对于指针,无论什么存储类型,疑虑置为空指针。
3 Z5 G) S, T8 [& I0 @6 u. a4 [/ Q
使用等号为变量赋初值。需要注意点是,指针必须用地址值作为初值,字符可用其编码值或用单引号括起的字符作为初值。对于静态变量,只在定义说明时赋初值一次。
/ x7 O# h) z, S: Q. ^3 S% h
(5)修饰符
, r+ w) H+ x$ m# q7 g- b1 T$ Q
用于对变量进行特殊的修饰。修饰符包括以下3类:
4 r7 x( \: {7 T P4 j
const——常量修饰符,知识被修饰的变量或变量指针是常量。C语言中,在内存中单独开辟一个常量区用于存放const变量。注意变量被const修饰后就不能再变了。对于指针有2种修饰的方法,它们的意义是不同的。例如:
' l0 Y9 O* R8 T8 j) n
const int #ptr=&a /#说明指针指向的对象是常量,是常量指针#/
4 W. ^$ @1 n ?: O6 U9 U4 w, W1 u
int #const prt=&b /#说明指针本身是常量,是指针常量#/
6 w: ]( c" @# G
volatile——易失性修饰符,说明所定义的变量或指针,是可以被多种原因修改的。譬如有的变量在中断服务程序中会被修改,有的会被I/O口修改,这种修改带有随机性,防止丢失任何一种这种修改,因此要把它修饰为易失性的变量。注意,禁止把它作为寄存器变量处理,也禁止对它进行任何形式的优化。
, }' C2 ]; X8 w9 d+ f4 v/ C$ n
near、far——近、远修饰符,用于说明访问内存中变量在位置上的远近。
作者:
zhoumi
时间:
2016-7-13 17:05
谢谢O(∩_∩)O哈哈~谢谢O(∩_∩)O哈哈
4 u% X( m) N: y6 `8 H, d. l9 ~
作者:
sunygd
时间:
2016-7-14 14:28
谢谢楼主,一步步来,学习中……
) I. M/ g- C5 c: F L* T# y3 V
作者:
hasky
时间:
2016-9-7 14:07
支持一下,很不错哦!
& }' G7 ]# }6 `$ B
作者:
wzs6668
时间:
2016-9-12 11:05
支持一下,很不错哦!
1 z# j' c$ e0 X/ P; v$ U4 e! x
作者:
liao821
时间:
2016-9-12 11:09
支持一下,很不错哦!
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2