第三章,数据类型
1、八进制。要使得使用的数据表达形式是八进制,需要在常数前加上0进行修饰。八进制所包含的数字是0-7之间。例如:a = 0123;/*在常数前加上一个0表示八进制*/
2、十六进制。a = 0x123 /*加上前缀0x表示常数为十六进制*/
3、一个正数的补码与其原码形式相同,一个负数的补码是将该数绝对值的二进制形式按位取反后再加1。例如11是001011。-11是按位取反110100,再加1,得110101。
4、对于有符号的整数,其在内存中存放的最左面一位表示符号位,如果是0表示是正数,如果是1表示是负数。
5、科学技术方式。num1=123.45,num2=0.54321。十进制。
6、指数方式。num1=1.2345e2,num2=5.4321e-1。或者用大写E表示。
7、F表示该常量是float单精度类型,L表示该常量long double长双精度类型,如:num1=1.2345e2F,num2=5.4321e-1L。如果不加后缀,默认情况下,实型常量为double双精度类型。
8、后缀的大小写是通用的。
9、字符常量。'A'和'a'不一样。只能是一个字符。
10、字符串常量。"abc"和"ABC"不一样。可以是任意字符数量,0个或1个或多个。
11、在C语言中存储字符串常量时,系统会在字符串的末尾自动加上一个“\0”作为字符串的结束标志。例如字符串"welcome"在内存中的存储形式是w e l c o m e \0
12、字符常量只能有一个字符,也就是说字符数量只有一个。字符串常量的长度可以是0,也可以是任意数,即使字符串常量中的字符数量只有1个,长度也不是1。如:"A",其长度为2,因为系统会自动添加一个结束字符\0,所以说长度是2。
13、转义字符。\n,换行;\\反斜杠“\”等。
14、在编写程序时,程序中用到的所有变量的定义应该放在变量的赋值之前,否则会产生错误。
/*正确写法*/
int iNumber1;
int iNumber2;
iNumber1 = 6;
iNumber2 = 4;
/*错误的写法*/
int iNumber1;
iNumber1 = 6;
int iNumber2;
iNumber2 = 4;
15、整型变量:
有符号基本整型:int
无符号基本整型:unsigned
有符号短整型:short
有符号短整型:unsigned short
有符号长整型:long
有符号长整型:unsigned long
16、实型变量:
单精度类型,float
双精度类型,double
长双精度类型, long double
17、字符型变量
定义一个字符型变量的方法是使用关键字char,
char cChar1;
char cChar2;
cChar1 = 'a';
cChar2 = 97;
18、auto变量。用于定义一个局部变量为自动的,这意味着每次执行到定义该变量时,都会产生一个新的变量,并且对其重新进行初始化。
#include<stdio.h>
void AddOne()
{
auto int iInt=1;
/*定义整型变量*/
iInt=iInt+1;
/*变量加1*/
printf("%d\n",iInt);
/*显示结果*/
}
int main()
{
printf("第一次调用:");
/*显示结果*/
AddOne();
/*调用Show函数*/
printf("第二次调用:");
/*显示结果*/
AddOne();
/*调用Show函数*/
return 0;
/*程序结束*/
}
结果:
第一次调用:2
第二次调用:2
事实上,关键字auto是可以省略的,如果不特定指定,局部变量的存储方法默认为自动的。
19、static变量为静态变量,将函数的内部和外部变量声明成static变量的意义是不一样的。不过对于局部变量来说,static变量是和auto变量相对而言的。尽管两者的作用域都是仅限于声明变量的函数之中,但是在语句块执行期间,static变量将始终保持它的值,并且初始化操作只在第一次执行时起作用。在随后的运行过程中,变量将保持语句块上一次执行时的值。
static int iInt=1;
结果:
第一次调用:2
第二次调用:3
20、register变量称为寄存器存储类变量。使用register的目的在与让程序员指定把某个局部变量存放在计算机的某个硬件寄存器而不是内存中。这样的好处是可以提高程序的运行速度。不过,这只是反映了程序员的主观意愿,实际上编辑器可以忽略register对变量的修饰。
用户无法获得寄存器变量的地址,因为绝大多数计算机的硬件寄存器都不占用内存地址。而且,即使编译器忽略register而把变量存放在可设定的内存中,也是无法获取变量的地址的。 如果想有效地利用寄存器register关键字,必须像汇编语言程序员那样了解处理器的内部结构,知道可用于存放变量的寄存器的数量、种类以及工作方式。但是,在不同的计算机对于这些细节可能是不同的,因此,对于一个要具备可移植的程序来说,register的作用并不大。
21、extern变量称为外部存储变量。extern声明了程序中将要用到但尚未定义的外部变量。通常,外部存储类都用于声明在另一个转换单元中定义的变量。 一个工程是由多个C文件组成的。这些源代码文件分别编译,然后链接成一个可执行模块。把这样的一个程序作为一个工程进行管理,并且生成一个工程文件来记录所包含的所有源代码文件。
/*在Extern1文件中*/
#include<stdio.h>
int main()
{
extern int iExtern;
/*定义外部整型变量*/
printf("%d\n",iExtern);
/*显示变量值*/
return 0;
/*程序结束*/
}
/*在Extern2文件中*/
#include<stdio.h>
/*定义一个整型变量,为其赋值为100*/
int iExtern=100;
结果:100
22、混合运算。不同类型之间可以进行混合运算,例如10+'a'-1.5+3.2*6。 在进行这样的计算时,不同类型的数据要先转化成同一类型,然后进行运算。转化的方式如下:
->double
float->
#include<stdio.h>
int main()
{
int iInt=1;
/*定义整型变量*/
char cChar='A';
/*ASCII码为65*/
float fFloat=2.2f;
/*定义单精度型变量整型变量*/
double result=iInt+cChar+fFloat;
/*得到相加的结果*/
printf("%f\n",result);
/*显示变量值*/
return 0;
/*程序结束*/
}
结果:68.200000