1.C语言的数据类型
基本类型
a.整型:
整型 int Visual c++6.0 中占4 个字节; Turbo c2.0占 2个字节取值:-2147483648 -2147483647
短整型 short int 2个字节取值:-32768 - 32767
长整型 long int 4个字节取值:-2147483648- 2147483647
无符号整型 unsigned int 4个字节取值:0-4294967295
无符号短整型 unsigned short int 2个字节
无符号长整型 unsigned long int 4个字节
注:对于不同的编译环境,整型在内存中所占的字节数也不一样。
b.字符型:
char (\n 回车 \t 下一制表位置 \r 回车 \'单引号 \\ :反斜杠字符"\")
注:对于c语言的任何一个字符都可用转义字符来表示
如:\101表示字符"A",\134表示反斜杠,\XOA表示换行
对于字符串常量内存字节数要加1,用来存放字符结束标志符"\0"
c.实型:
单精度 float 占4个字节,32位。取值为:3.4E-38 ~ 3.4E+38 ,可提供6到7位有效数字
双精度 double 占8位字节,64位。取值:1.7E-308 ~1.7E+38
d.枚举:
enum
构造类型
a.数组 array
b.结构体 struct
c.共用体 union
指针类型 *
空类型 void
2.输入输出函数
printf(格式控制字符串,输出列表) //格式控制字符串可由格式字符串(以%开头)和非格式字符串(原样输出)组成.
scanf(格式控制字符串,地址表列)
putchar() //字符数据的输出 等同与 printf(%c,.) 位于<stdio.h>中
getchar() //从键盘输入中读取一个字符。scanf(%c,&mchar)
3.逻辑运算
!(非) ,&&(与), ||(或)
4.二维数组
定义:类型说明符 数组名[常量表达式1][常量表达式2]
注:a.存储器单元是一维线性排列的。是按行存放的。
b.对于全部元素赋初值,则数组第一维的长度可以省略,但是第二维不能省。如:int a[][3]= {1,2,3,4,5,6}
c.可以只对部分元素赋初值,没赋初值的元素自动取0值。
d.一个二维数组可以分解为一个多个一维数组。例:a[3][4]可分解为三个一维数组,其数组名分别为a[0],a[1],a[2],而这个
一维数组都有4个元素。如一维数组a[0]有元素为:a[0][0],a[0][1],a[0][2],a[0][3]
5.字符数组
c中没有字符串数据类型,是用字符数组来表示字符串变量的。字符串总是以'\0'作为串结束符,所以,字符串就是一种以‘\0’结束的字符数组。
注:在求字符串长度时,不包含结束符'\0'。但是sizeof却要包含。如:
char c[]="string";
charc1[]={'s','t','r','i','n','g','\0','\0'};
printf("%d\n",sizeof(c)); // 7 ,默认在string后加'\0'
printf("%d\n",sizeof(c1)); //8,对于字符数组只能自己加结束符
printf("%d\n",strlen(c)); //6 求字符串长度时,不包含结束符'\0'
printf("%d\n",strlen(c1)); //6 求字符串长度时,不包含结束符'\0'
常用的字符串处理函数(在stdio.h中与string.h中):
puts(字符数组名)---把字符数组中的字符串输出到显示器。
gets(字符串数组名)--从输入设备得到字符串。
strcat(字符数组名1,字符数组名2)--把字符数组中2中的字符串连接到字符数组1中字符串的后面,并删除字符串1后的串标志"\0";
strcpy(字符数组名1,字符数组名2)--把字符数组2中的字符串复制到字符数组1中,串结束标识'\0'也一同复制。
strcmp(字符数组名1,字符数组名2)--按照ASCII码顺序比较两个数组中的字符串,并由函数返回比较结果。
strlen(字符数组名)---返回字符实际长度(不含字符'\0')
6.函数
对于被调用函数的声明和函数一般形式:类型说明符被调函数名(类型,类型,..);
注:如果被调用函数的返回值是整型或字符型时,可以不对被调用函数作说明而直接调用。
如果被调用函数定义出现在主调用函数之前,在主函数可以不对被调用函数作说明而直接调用。
7.变量的作用域及存储特性
a.局部变量:又称内部变量。在函数内作定义说明,其作用域仅限于函数内。
注:允许在不同的函数中使用变量名,它们代表不同的对象,分配不同的单元,互不干扰。
b.全局变量:又称外部变量,它是在函数外部定义的变量。它不属于哪一个函数,而属于一个源程序文件。其作用域是整个源程序。在函数中使用全局变量,一般应作全局变量说明。只有在函数中经过说明的全局变量才能使用,说明符为:extern.但是在一个函数之前定义的全局变量,在该函数内可以再加以说明。
另注:外部变量在定义时就已分配了内存单元,外部变量定义可作为始赋值,外部变量说明不能再初始值,只是表明在函数内要使用某外部变量。
在同一源文件内,允许全局变量和局部变量同名,在局部变量的作用域内,全局变量不起作用。
变量的存储特性:
a.auto(自动变量)默认。为动态存储,既只有在使用它才分配存储单元,开始它的生命周期。
b.extern(外部变量) 为静态存储,外部变量等同与全局变量。当一个源程序由若干个源文件组成时,在一个源文件中定义的外部变量在其它的源文件中也有效。
c.static(静态变量) 为静态存储方式,可分为静态局变量和静态全局变量。
静态局变量:在局部变量的说明前再加上static说明。
如:在一个函数 f() { static int a,b;
static float a[5]; ...}
特点:(1).静态局部变量在函数内定义,当调用时已存在。当函数f()退出时仍然存在,生存周期为整个源程序。
(2).静态局部变量虽然生存周期为整个源程序,但是退出其函数后存在但是不能使用。
(3).允许对构造类静态局部量赋初值。若未赋值,则系统自动赋值为0值。
(4).对基本类型的静态局部变量若没赋值,则系统自动赋值为0.而对于自动变量不赋初值,则其值是不固定的。
静态全局变量:全局变量再加以static就成了静态全局变量。对于静态全局变量其则只在定义该变量的源文件有效,在同一源文件的其他源文件中是不能使用的。
(5).把局部变量改变为静态变量后就是改变它的存储方式,即生存周期。把全局变量改变为静态变量后改变它的作用域,限制了它的使用范围。
d.寄存器变量(register).当一个变量反复访问时,就可将此变量声明为register。放在cpu的寄存器中。别注:只有局部自变量和形式参数才能定义为寄存器变量。使用个数很有限。对于Truboc 、MS C等使用是按自动变量处理的。
8.内部函数和外部函数
内部函数--一个只能被本文件中的其他函数所调用的函数。形式:static 类型函数名(形参表)
外部函数---如果在函数标识符前面加上extern,形式:externint fun(int a,int b) 其中,extern为默认。
9.指针变量声明
[存储类型] 类型标识符 *指针变量名;
[存储类型] 类型标识符 *指针变量名=变量地址;(注:int *p; 表示:变量p表示指针变量;另外P可用来存放整数变量的地址。指针变量本身存储的都是地址,每个指针(地址)占4个字节(在VC中),例:char *p, size(p)为==4 );
10.指针运算
a.指针赋值: 如:int x; int*p=&x; 也可在程序中对其初始化:intx,*p; .. p=&x
注意:在没赋初值时,指针变量的内容是不确定的。如果此时引用指针指向的变量,将会产生不可预料的后果。如:int *p; *p=100; //错误,p没有初始化。
b.指针的加减:指针变量加1不能是简单的地址加1,加上一sizof(指针变量所指类型)。
两个指针变量在指向同一存储区域(数组)的元素时,可以进行相减。其差绝对值表示两指针元素之间相差的元素个数。
顶0
|
|