C

来源:互联网 发布:首页源码 编辑:程序博客网 时间:2024/05/01 11:10

数组
定义 :类型符 数组名 [常量表达式]
int n;
scanf(“%d”,&n);
int a[n]; //企图在程序中临时定义数组的大小,不合法。
初始化
(1)、int a[3]={0,1,2};
(2)、int b[5]={1,2,3};//其余的赋值为0;
(3)、int c[3]={0,0,0,};// int c[3]={0};等价
(4)、int d[3]={1,2,3};// int d[]={1,2,3};等价
注意:定义好的数值型数组没有初始化,系统将其赋值为0;字符型数组赋值为‘\0’
二维数组
二维数组中元素的排序的序列是按照行存放
二维数组
(1) int a[2][2]={{1,2},{1,2}};
(2) int a[2][2]={{2},{1}};//对每行第一个元素赋值,其余元素为0;
(3) int a[2][2]={1,2,1,2};
(4) int a[3][2]={{1},{},{2,2}};//中间不赋值
(5) int a[][2]={1,2,3,4}//系统自动对第一个元素赋值

函数
当函数的额形参和实参数据类型不相同的时候,根据形参数据类型转化实参的数据类型。如果函数的类型和返回值得类型不相同,以函数类型为标准。
多维数组名作函数参数
形参数组定义可以指定每一维或者省略第一维的大小。但不能把二维以上的大小省略。当形参为一维数组时,可以省略数组大小,可以将实参数组名传递给形参。相当于指针。
局部变量
在函数体内定义(作用域该函数内),或者复合语句内定义的变量(作用域该语句)
全局变量
定义在某处的变量,该变量以后的函数都在变量的作用域范围内。通常全局变量名头字母大写。当全局变量和局部变量重名时,局部变量起决定作用。
变量的存储方式和生存周期
内存中供用户使用的空间可以分为三部分:程序区,静态存储区,动态存储区。全局变量存放在静态存储区,局部变量存储在动态存储区。
动态存储区存放以下数据:
函数形式参数,函数调用时候的现场保护和返回地址,函数中除关键字static定义的变量。在函数中两次调用同名函数,给函数形参分配的动态存储空间是不同的。C语言中每个函数和变量都有两个属性:数据类型和数据的存储类别。数据类型指的是基本数据类型,数据存储类别指的是内存中存储方式(auto statis register extern)根据变量的存储类别可以知道变量的作用域和生存周期。
auto存储类别:
静态局部变量:存储在静态存储区,整个程序运行期间不释放,而动态存储变量存储在动态存储区,函数调用后释放。程序编译是对静态局部变量赋值,自动变量在编译时不赋值,而是在函数调用时赋值。如果定义静态局部变量不赋值,系统赋值为0或者’\0’而动态存储变量会被赋值为一个随机数。虽然静态局部变量在函数调用后任然存在,但是不能被其他函数调用。
寄存器变量:register int a;//将变量存储在cpu的寄存器中
静态存储变量(静态存储区)和动态存储变量(动态存储区)存储在内存中。
全局变量存储在静态存储区域中。
全局变量的存储类别
全局变量(外部变量)生存周期为固定的,作用域为从定义出开始到文件的结尾。(程序由一个或者多个源文件构成,文件里包括各种函数和变量定义,函数之间可以相互调用,变量可以定义在函数内或者外)

文件内部扩展外部变量的作用域
如果将外部变量扩展到变量定义前的位置,可以在该出使用关键字extern申明变量extern a,b;//变量a,b定义在申明后并且在函数外。
变量的声明分为定义性声明(需要建立存储空间int a;)和引用性声明(extern a;//声明将已经定义的外部变量的作用域扩展到此处)
内部函数和外部函数
函数本质上是全局的,不加申明一个源文件中的函数可以被该文件以及其他文件中的函数调用。根据函数能否 被其他源文件调用分为内部函数和外部函数。
内部函数static int fun(int a);//函数作用域仅限于本文件,不同文件中出现同名的函数互不干扰。相应的在函数定义时添加extern关键字,该函数可以被其他源文件的函数调用。C规定extern可以省略。在其他源文件(.c文件)中调用该函数时候需要声明,可以添加关键字extern
指针
程序经过编译后将变量名转换为变量地址,对变量的地址都是通过地址进行的。
按照变量名进行访问称为直接访问,一个变量的地址称为该变量的指针。
int *a[10];
int *p=a;
p[2];//合法,[ ]变址运算符
p++;//由于 运算符和++运算符同优先级,但是由于两者的结合顺序由右向左,因此相当于 *(P++)先引用p的值再自加。
char *pt=”helloworld”;//合法
char str[10];
str=”helloworld”;//不合法
str[]=”helloworld”//不合法
//////////////////////////////
char str[14]=”helloworld”;//合法
指针变量是可以改变的,但是数组名代表一个固定的值(数组元素的首地址),不能改变。

指向函数的指针
定义:类型名(*指针变量名)(函数参数列表)
int (*pt)(int ,int)//函数指针pt指向返回值为int型且函数参数列表为两个int型的函数
,不能讲pt指向其他非规定形式的函数。同一个函数指针可以两次指向不同的函数。
指向函数的指针作为函数参数,传递给主调函数的是北调函数的函数名,相比在主调含税中直接调用北调函数,使用函数指针可以增加代码的重用性。
float (*pt)[4]; float *pt_1;//两者都是指向float型的指针变量,存储的都是一个字节内存单元的地址,不同的是不同的是pt+1移动四个字节,pt _1++移动一个自己。
/////////////////////////////////////
二维数组的数组名代表什么?加法代表什么?
int(*p)[4];//指向一维数组的指针变量
int *p[4];//数组元素为int型指针的指针数组
char*pt[]={{I},{Love},{money}};//定义指针数组,数组元素指向字符串的首地址。
内存动态分配区域和指向它的指针
内存动态分配区域俗称堆;需要时随时开辟,不需要是随时释放。不能通过变量名或者数组名去引用这些数据,只能通过指针引用。
建立内存动态分配区域
头文件:include

define 和typedef的区别

define 只是简答的字符替换,在预编译时处理,而typedef不是这样的,在编译阶段处理。可以

将所有的typedef 语句包括在一个头文件中,当程序移植需要转换数据类型时候,只需在头文件中修改

文件的分类
分为ASCII文件和二进制问价
将内存中的数据1000存入外存当中,以ASCII文件存储,分配4个字节,每个字节存储数据的每位。如果采用二进制文件(内存映像文件),按照数据在内存中存储方式存储在外存中。
文件缓冲区
系统为程序访问的文件在内存中开辟的缓冲区,当数据从内存向磁盘输出时,数据填满缓冲区后,送入外存磁盘。当数据从磁盘输入内存中时,文件缓冲区充满后,逐个将数据送入内存中。
文件类型指针
打开的文件都在内存中开辟一段空间,保存与文件相关的信息,系统定义一个结构体变量(FILE)存储这些信息。
文件打开与关闭
文件的打开是在内存中开辟一段空间,建立相应的文件信息区和文件缓冲区。通常使用文件指针变量指向打开的文件,文件的关闭是断开文件指针变量和文件的联系。
fopen(文件名,打开方式)
函数返回指向打开文件信息区的文件指针变量
当程序运行的时候,系统自动打开三个标准流式文件,stdin stdout stderr,都以终端为输入输出对象。
关闭文件
fclose(文件指针)
关闭成功返回0;关闭失败返回-1
文件关闭的过程,将文件缓冲区中的数据推送到磁盘文件中,撤销文件信息区。

0 0
原创粉丝点击