c语言的变量定义

Python017

c语言的变量定义,第1张

C语言中变量遵循“先定义后使用”的原则:

1、定义变量的格式:数据类型  变量名

首先要强调的一点是:变量的定义是一条语句,每条语句都是以分号结尾的。故定义完变量,后面不要漏掉“;”分号。

在变量定义中,“数据类型”表示想要存储什么类型的数据就定义什么类型的变量。

如想要存储整数就定义成 int 型;想要存储小数就定义成 float 型或 double 型;想要存储字符就定义成 char 型等等。

“变量名”就是你想给这个变量起个什么名字,通常都是用字母、数字与下划线组合而成。比如:

“int i;double price;double goods_price2”等等。

就表示定义了一个整型变量 i、小数型变量price、goods_price2;

2、变量定义完成后,接下来就是使用变量,为变量赋值。

将一个值放到一个变量中,这个动作叫“赋值”。通俗点讲,“给变量赋值”意思就是将一个值传给一个变量。

赋值的格式是:

变量名 =  要赋的值

它的意思是将=右边的数字赋给左边的变量。比如:

i = 3

这就表示将 3 赋给了变量 i,此时 i 就等于 3 了。

3、变量的定义和赋值,可以分成两步写,也可以将它们合成一步,而且事实上,在实际编程中用得最多的也是合二为一的写法。

形式如下:

数据类型  变量名 = 要赋的值

比如:int i = 3

就表示定义了一个变量 i,并把 3 赋给这个变量。它与

int i

i =3

是等价的。

在定义变量时也可以一次性定义多个变量,比如:

int i, j

这就表示定义了变量 i 和 j。这里需要强调的是,当同时定义多个变量时,变量之间是用逗号隔开的,千万别写成分号。这是很多新手最容易犯的错误,即将逗号和分号记混了。

同样也可以在定义多个变量的同时给它们赋值:

int i = 3, j = 4

中间还是用逗号隔开,最后别忘记输入分号。

最后需要注意的是,在较老的 C89/C90 标准(也称 ANSI C 标准)中,变量只能在程序的开头定义,或者说变量定义的前面不能有其他非声明或非定义的语句。

扩展资料:

在主回答中,提到了变量定义时,变量名通常都是用字母、数字与下划线组合而成,但是实际上,变量名也不是随便组合的,变量定义需要遵循一定的规范,否则容易产生歧义,影响整体程序代码 的可读性。

所以在定义变量的时候,要注意以下命名规范:

(1)、变量名的开头必须是字母或下划线,不能是数字。实际编程中最常用的是以字母开头,而以下划线开头的变量名是系统专用的。命名应当直观且可以拼读,可望文知意,便于记忆和阅读。

标识符最好采用英文单词或其组合,不允许使用拼音。程序中的英文单词一般不要太复杂,用词应当准确。

(2)、变量名中的字母是区分大小写的。比如 a 和 A 是不同的变量名,num 和 Num 也是不同的变量名。当标识符由多个词组成时,每个词的第一个字母大写,其余全部小写。

比如:   int CurrentVal;

这样的名字看起来比较清晰,远比一长串字符好得多。

(3)、变量名绝对不可以是C语言关键字,不能有空格。

(4)、变量名的长度应当符合“min-length &&max-information”原则。

C 是一种简洁的语言, 命名也应该是简洁的。例如变量名MaxVal 就比MaxValueUntilOverflow 好用。标识符的长度一般不要过长,较长的单词可通过去掉“元音”形成缩写。

另外,英文词尽量不缩写,特别是非常用专业名词,如果有缩写,在同一系统中对同一单词必须使用相同的表示法,并且注明其意思。

并未要求一次性将所有的变量声明或者定义,只要求在使用某个变量之前先定义。变量的定义风格利弊如下:

1、变量在函数开头定义:便于修改。

2、变量就近定义:便于阅读。

3、变量在块语句的开头定义:有的临时变量放在语句块开头,可以不用在函数开头定义,并且在使用完毕后释放空间,可以这么做,但不要无故添加花括号来提高代码的结构。

一般的,为了要达到最大的兼容跨平台性,还是放在函数开头定义。因为C89规定,在任何执行语句之前,在块的开头声明所有局部变量。

如以下代码:

会报错信息:error C2065: 'salary' : undeclared identifier。

在C99以及C++中则没有这个限制,即在首次使用之前,可在块的任何位置都可以声明变量。

扩展资料:

c语言变量定义和保存格式的关系:

1、源文件保存为.c格式的话变量只能定义在最前,若保存为.cpp格式的话,变量定义较为灵活,不用在最前。

2、在C语言里,变量只能在函数的开头处声明和定义。在函数里要用到的变量必须要在开头处声明定义。声明定义的前面不能有任何其他非声明定义的语句。全局变量在函数体的外部声明定义。

而C++里(.CPP文件是按C++标准编译的),只要在用到变量前对该变量进行声明定义就行了,位置不做特别要求。而C语言的就定了在一个模块里(函数、循环体等)先声明一切所需变量后才能进行相关操作的规定。

参考资料:

百度百科--C语言

C语言具有简洁紧凑,灵活方便,运算符丰富,数据类型丰富,表达方式灵活实用等特点,所以C语言程序设计更主动、灵活。很多人从C语言入门编程,下面整理了一些C语言基础知识,希望对大家有所帮助!

1.C语言中,变量必须先声明后使用,即一个程序块(花括号对)中所有临时变量必须在第一条可执行语句之前全部声明,而不能像C++那样随用随声明

2.C语言中参数传值传递形参,即为参数的拷贝,此与C++/JAVA相同,同时值得注意,ANSI C不支持引用,此与C++/JAVA有区别,那么要对参数进行修改只能使用指针方式(指针传值指针本身仍是形参,要修改指针本身那必须使用双重指针)

3.C语言默认类型为int,即参数无类型或函数无返回值类型声明,则认为是int(貌似一些编译器不支持),同时不建议使用该特性

4.无参数的函数声明应当使用void表明,否则C语言按照老式声明方法忽略参数类型检查

5.全局变量建议全大写,局部变量建议全小写,内部变量31个字符有效,外部变量不区分大小写,仅6个字符有效,所以必须保持唯一性

6.ANSI C是按照多字节实现的,UNICODE是后来发展的,所以有char/WCHAR,与.NET中char直接是双字节有区别,在C#中导入dll时值得注意

7.C语言支持枚举,并且枚举和int直接强制类型转换即可,比.NET方便

8.#define声明宏定义直接在编译时替换,不进行类型检查,const声明常量则可以进行类型检查

9.运算符的优先级记忆比较麻烦,还是()可靠

10.goto并不是一无是处,在不考虑程序可读性的情况下可能获得更高的效率

11.函数实际也可以与特殊的类型相对应,那样对于理解函数指针比较方便,函数为外部类型

12.static用于全局变量和函数则限定该变量和函数的使用范围仅为该源文件(从而无需考虑与其他源文件不得重名),用于函数内部变量则该变量的内存分配和回收不再同于普通临时变量(调用函数生成,函数返回销毁),而是一直存在于静态变量区,从而可以保存一些状态

13.头文件的作用体现在调用其他源文件时不需要再次写函数定义,所以实现函数是不需要头文件的,调用时才需要,可以采用富头文件定义一大组接口,然后使用多个源文件分别实现

14.寄存器变量使用register声明,仅适用于使用频率高的局部变量(含形参)(受限于底层硬件,不一定会被分配到寄存器,但是这么写不影响效率)

15.全局变量和静态变量默认初始化为全零且仅初始化一次,局部变量默认初始化为未定义且每次都会重新初始化

16.递归调用的方法一般比较紧凑,但是每次调用会单独维护调用的`堆栈,所以效率不是最高

17.#include的作用体现于将一些内容避免重新写一遍(主要是类型、函数和外部变量定义),所以实际上不一定为h文件

18.表示一行尚未结束,对于定义长的字符串和define比较有用

19.函数调用的执行顺序不确定,所以对于a()+b()这样函数中使用相同变量并且改变其值的需要借助临时变量处理,防止不同实现的调用顺序不一致

20.##用于宏定义中连接前后两个部分,如cat(a, b) a ## b

21.指针是C/C++的重要内容,当然也是双面刃,用好了很方便而且高效,用不好那就造成程序不稳定

22.使用va_list, va_start, va_arg, va_end来定义可变参数的函数,通过va_start函数中的第一个不变参数将va_list指向参数列表(函数调用的栈中),然后通过va_arg获取每个参数并将va_list移动指定类型的长度,最后则通过va_end完成必要的回收工作,需要指出的是va_arg没有结束边界,所以比较有效的方式有两种,一种对于参数类型一致,则可以第一个参数指出后续参数的总数,然后依次获取,另一种对于不同类型的参数混用,则可以通过类型标识+参数配对的方式进行使用(第一个参数依然可以指定数量,当然也可以检查标识),从而避免最后读取无效的参数,对于可变参数仅支持int和double两种类型(参数未限定类型,故按照旧式声明理解)以及指针类型

23.函数指针是用来在C语言中实现动态调用的比较有效的方式

24.结构体用作参数依然是拷贝为形参传递,这点与JAVA中全部对象都是类有区别(类的对象通过引用传值,C#支持struct),所以对于大的结构体事宜使用指针传递,而对于小的结构体拷贝传值效率并不低

25.代码中字符数组为静态常量,对其操作无效,程序块中数组的声明是可以自动回收的,通过malloc/calloc分配的内存为堆内存,需要自行通过free回收