找回密码
 注册
关于网站域名变更的通知
查看: 513|回复: 5
打印 上一主题 下一主题

C语言的变量

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2016-7-13 14:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
1.
8 E  I1 m: K9 L% S( P5 a( p变量  \3 A( }7 T; P5 e- |! S1 J
1)! ?# f" f5 k7 j1 b- L6 d' ?
格式
7 P9 n/ A& _1 p[存储类型] 类型说明符 [修饰符] 标识符 [=初值] [,标识符[=初值]]…; k4 Z: q1 F+ s+ @; t6 o  m* b3 r1 X4 D/ B
(1)类型说明符
6 @3 |: g( S6 N2 y对于数字与字符,其类型共有9种:char、unsigned char、int、unsigned、long、unsigned long、float、double、long double。6 U/ {* Q& o+ l! v6 {& |- r
void类型,在具体化时可以用类型强制来指定类型说明符中的任意一类。
7 D, V  ~* u2 u1 ]  u; z# i2 ^通过typedef定义的类型别名。为了增强程序的可读性和移植程序时的方便,C语言允许用户为C语言固有的类型用typedef起别名。格式如下:4 B! p$ D1 K# y; H7 @# D/ V
Typedef C固有的简单类型或复合类型
; a' C5 v! J& Q/ G  B- n! O: _/ w别名标识符;
  k) W! ?- K- i7 H3 r用别名代替原来的类型,在说明中用作类型说明符。别名一般用大写字符,例如:
. S! A$ Y- D# \, j4 qTypedef          long               BIG
! j' N* @- C; X1 s; LBIG        x=80000
& I9 y- k5 O6 i1 @" x(2)标识符4 n' Y& K4 b0 S9 D' T
变量,是不带“#”的标识符。编译器为变量自动分配内存。
% i3 B# o) H' n- c. W, _指针,是带有“#”的标识符。指针的内容必须是地址。编译器为指针自动分配内存。* P7 B6 f6 v8 P& b0 m! w. o4 w
注意,指针标识符是不带“#”的标识符部分。指针说明中的类型说明符、存储类型和修饰符是指针指向对象的类型。一般来说,指针是变量,即指针指向的对象是变量。变量指针的类型可以是void。例如:8 n% v. s" d3 ^  }. J+ I
extern int const #count          ;count是指针,而且是外部存储类型的整型变量0 W0 L. k, D; W* N9 r3 ~( s4 q
(3)存储类型
5 n' q( V6 J2 P) k4 @- V3 P# V存储类型指定被说明所在内存区域的属性。
8 D3 C. ~6 v# p* T+ p8 y6 N& Mauto——自动存储类型,是局部变量,是在函数内定义的变量且仅在该函数内是可见的,放在内存的栈中。其存储区随着函数的进入而建立,随着函数的退出而自动放弃。在函数中说明的内存变量,凡未加其他存储类说明的都是auto类型。每次调用该函数时,都需要重新在堆栈中分配空间。
: ]1 M: Y( O& a% a, |; ^resister——寄存器存储类型,将使用频繁的变量放在CPU的寄存器中,需要时直接从寄存器取值,而不必再到内存中去存取,以求处理的高速。
4 a0 e  S5 M& h9 P& S# Wextern——外部存储类新星,表明该变量是外部变量,是在函数外部顶一顶变量。其作用域为从变量的定义开始到本程序文件的末尾。在作用范围内,外部变量可以是被程序中的各个函数所用。编译时外部变量被分配在静态存储区。外部变量能费用被存取,由该外部变量定义性说明与使用它的函数之间的位置关系来决定。如果程序中只有一个文件,则在定义了外部变量之后,使用该外部变量的函数可直接存取;如果程序中有多个文件,则在非该变量的定义文件中要使用它时,必须先加引用性说明,然后才能使用。
, |$ L) ^0 C4 W) z) s7 J# v其引用性说明格式如下:
4 R3 i& C8 F( _! y4 t) V) ~8 M# `extern     类型说明符 [修饰符] 变量名[,变量名]…;
$ Q+ \: P& C% _: [; J0 g" B6 A在C语言中,与外部变量对应的还有内部变量,在函数内部定义性说明的变量都是内部变量,如前面的auto和register存储类型变量。内部变量只能在唉函数内部进行存取。
9 h& r$ b) U6 j2 `6 X- r4 d' {0 astatic——静态存储类型,分为内部静态和外部静态2种。在函数内部定义变量并说明为静态存储类的是内部静态变量,在离开这个函数到下次调用之间内部静态变量的值保持不变。内部静态变量在程序全程内存在,但只能在本函数内可存取。在函数外部定义变量并说明为静态存储类型的是外部静态变量。外部静态变量在程序全程内存在,但子啊定义它的范围以外,也是隐蔽起来的,是不可用的。对于只有一个源文件的程序来说,如果在文件开始定义的外部变量,加与不加static是一样的。% M' A6 ~6 @! d
赋初值部分6 J. E6 q3 d5 W! Z# ?  c( F* b
若初值缺省,则auto存储类型和resister存储类型的变量为随机值;static存储类型的变量被编译器自动清0;对于指针,无论什么存储类型,疑虑置为空指针。  X9 {# C( M) b4 [0 H
使用等号为变量赋初值。需要注意点是,指针必须用地址值作为初值,字符可用其编码值或用单引号括起的字符作为初值。对于静态变量,只在定义说明时赋初值一次。9 Y/ h( @3 I7 Q. a) z
(5)修饰符& g2 c7 I. ~: s, `. p
用于对变量进行特殊的修饰。修饰符包括以下3类:
0 n9 c: x% r( e( dconst——常量修饰符,知识被修饰的变量或变量指针是常量。C语言中,在内存中单独开辟一个常量区用于存放const变量。注意变量被const修饰后就不能再变了。对于指针有2种修饰的方法,它们的意义是不同的。例如:
: t$ P2 M' ]+ e% ~const     int          #ptr=&a                /#说明指针指向的对象是常量,是常量指针#/
5 I2 |: t, X$ D" Hint        #const   prt=&b                /#说明指针本身是常量,是指针常量#/
0 o7 B6 i1 E- H; `/ n" u# N& Uvolatile——易失性修饰符,说明所定义的变量或指针,是可以被多种原因修改的。譬如有的变量在中断服务程序中会被修改,有的会被I/O口修改,这种修改带有随机性,防止丢失任何一种这种修改,因此要把它修饰为易失性的变量。注意,禁止把它作为寄存器变量处理,也禁止对它进行任何形式的优化。5 ~3 B9 R. `$ L* [# P4 Q
near、far——近、远修饰符,用于说明访问内存中变量在位置上的远近。

该用户从未签到

2#
发表于 2016-7-13 17:05 | 只看该作者
谢谢O(∩_∩)O哈哈~谢谢O(∩_∩)O哈哈7 s! M, t+ h3 X& D: n! w; h

该用户从未签到

3#
发表于 2016-7-14 14:28 | 只看该作者
谢谢楼主,一步步来,学习中……
2 `1 h3 @1 F1 ~7 ]3 V' F! W' ?

该用户从未签到

4#
发表于 2016-9-7 14:07 | 只看该作者
支持一下,很不错哦!
' Y0 c% X9 b& t0 W  O5 m0 ~, n& d; Z

该用户从未签到

5#
发表于 2016-9-12 11:05 | 只看该作者
支持一下,很不错哦!% r' a8 ~9 t: N; g( Z. A( s

该用户从未签到

6#
发表于 2016-9-12 11:09 | 只看该作者
支持一下,很不错哦!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-23 22:49 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表