C语言程序设计笔记

编译源程序生成二进制代码表示的目标程序(一个二进制文件,文件后缀为obj)
不能直接运行该目标程序,它需要与编程环境提供的库函数进行链接,形成可执行的程序(文件后缀为exe)
如果源程序有语法错误,编译器就会指出该语法错误所在,而不生成二进制代码
整型变量所需存储空间与编译系统有关,在Visual C++中,int型变量占用4个字节
循环体语句只能是一条语句,故用大括号将语句括起来组成复合语句,复合语句在语法上被认为是一条语句
getchar()只能读入一个字符,但仍需按下回车才能停止此次读入
switch中的表达式一般是整形或字符型,不能是字符串
else与最靠近它的、没有与别的else匹配过的if相匹配
通常把调用其他函数的函数称为主调函数,被调用的函数称为被调函数
参数传递过程中,将实参的值复制给形参,这种参数传递是单向的,只允许实参把值复制给形参
函数声明的目的主要是说明函数的类型和参数的情况,以保证程序编译时能判断对该函数的调用是否正确
函数类型为void表示不返回结果
若没有函数类型声明,函数类型将被默认定义为int
c语言中把定义在函数内部的变量称为局部变量,局部变量的有效作用范围局限与所在的函数内部,形参是局部变量
c语言还允许定义作用于复合语句中的局部变量,其有效使用范围被局限于复合语句内
定义在函数外而不属于任何函数的变量称为全局变量,全局变量的作用范围是从定义开始到程序所在文件的结束,它对作用范围内所有的函数都起作用
当函数的局部变量与全局变量同名时,在该函数中全局变量不起作用,而由局部变量起作用,当函数局部变量与复合语句的局部变量同名时,以复合语句为准
函数被调用时,系统自动为其局部变量分配存储单元,一旦该函数调用结束,所有分配给局部变量的单元由系统自动回收,所以又把局部变量称为自动变量
自动变量定义形式是:auto 类型名 变量表;在自动变量定义时,auto可以省略
变量的作用范围和生存周期是两个不同概念
执行程序时存储分布为系统存储区:如操作系统、语言系统(dev c++)和用户存储区:又分为程序区(c程序代码)和数据区
c语言把保存所有变量的数据区分为动态存储区和静态存储区
动态存储区是使用堆栈来管理的,适合函数动态分配与回收存储单元,且动态存储区中的变量按函数组织
静态存储区相对固定,管理较简单,它用于存放全局变量和静态变量
静态局部变量,它有局部变量的作用域和全局变量的生存周期 静态变量定义格式:static 类型名 变量表;
静态变量赋初值只在函数第一次调用时起作用,若没有赋初值,系统将自动赋0
除了静态局部变量外,c语言也有静态全局变量,它的作用与程序文件结构有关
有些字符,如回车符、退格符等控制码,它们不能在屏幕上显示,也无法从键盘输入,只能用转义字符来表示
转义字符由反斜杠加上一个字符或数字组成,它把反斜杠后面的字符或数字转换成别的意义
**为数字)表示八进制数字所对应的字符,如\102表示字符’B’,\x(*为数字或字母)表示十六进制数字所对应的字符
实数也可用科学计数法 格式为:eE为数字 e\E后面的要为整数)输入用%le,输出用%e
‘\0’是字符串结束符
指针变量的类型不是指指针变量本身的类型,而是指它所指向的变量的数据类型,不同类型指针变量所占的内存空间大小都是相同的
指针的类型和它所指向变量的类型必须相同
Int *a=0 是将指针变量初始化为空指针,这里的0是ASCII字符NULL的值
函数ges()有返回值,如果输入成功则返回值是字符串第一个字符的地址,如果输入失败则返回NULL
Strlen()返回字符串有效字符的个数(不包括字符结束符’\0’)
malloc()对所分配的储存块不做任何事情,calloc()对整个区域进行初始化
动态存储释放函数free(),void free(void p) 功能:释放动态分配的整块内存空间,p为要释放空间的首地址
如果两个结构变量的类型相同,可以直接赋值,将一个结构变量的所有成员值都复制给另一个
分配调整函数void
realloc(void *p,unsigned size) p必须是以前通过动态存储分配得到的指针,参数 size为现在需要的空间大小,失败返回NULL
结构的定义以分号结束,这是因为c语言中把结构的定义看做一条语句
在定义嵌套的结构类型时,必须先定义成员的结构类型,再定义主结构类型
在程序编译时,所有出现宏名的地方都会用宏定义字符串来替换。宏也常称为宏替换。如果宏定义字符串后面跟分号,编译预处理时把分号也作为宏替换内容
#define最后跟的"“表示改行未结束,与下一行合起来称为完整一行。
c语言允许宏嵌套定义
宏替换时括号保留
文件包含(include)的作用时把指定的文件模块内容插入到#include所在的位置,文件包含必须以#开头,这表示编译预处理命令,它将在程序编译时起作用
文件包含中指定的文件名如果使用尖括号,将使用c语言的标准头文件,由编译程序到c系统中设置好的include文件夹中把指定的文件包含进来
如果使用双引号”",则编译程序首先到当前工作文件夹寻找被包含的文件,若找不到,再到系统include文件夹中查找文件,一般适用于编程者自己的包含文件,也可以自己编写头文件
.h文件通常被称为头文件
头文件经常用于做一些统一的定义、声明或符号常量以及结构体、链表等一些数据结构定义
条件编译,例如:#define f 1 /#if f/…/#else/…/#endif
所有的编译预处理指令都是在编译预处理步骤中起作用,与程序真正运行过程无关
对于全局变量来说,还有一种称为外部变量的形式。即全局变量的使用位置先于该全局变量的定义,在使用之前需要声明为外部变量 外部变量声明:extern 变量;
如果一个程序包括多个文件模块,要实现在一个模块中调用另一模块中的函数时,就需要对函数进行外部声明声明格式为:extern 函数类型 函数名(参数表说明);
一般情况下,关键字extern可以省略,编译程序如果在当前文件模块中找不到函数定义体,自动认为该函数时外部函数
c语言也允许把函数定义成静态的,以便把函数的使用范围限制在文件模块内,静态的函数在c语言中也称为内部函数,定义格式为: static 函数类型 (参数表);
可用%x来以16进制的方式输出指针数组中某个指针变量所指向内容的首地址
在c语言中,函数名代表函数的入口地址。可以定义一个指针变量,接收函数的入口地址,让它指向函数,这就是指向函数的指针,也称为函数指针
函数指针定义的一般格式为:类型名 (*变量名) (参数类型表)
通过函数指针可以调用函数,它还可以作为函数的参数
在使用函数指针前,要先对它赋值。赋值时,将一个函数名赋给函数指针,但该函数必须已定义或声明,且函数返回值的类型和函数指针的类型要一致
通过函数指针调用函数的一般格式为:(*函数指针名)(参数表);
c语言的函数调用中,函数名或已赋值的函数指针也能作为实参,此时,形参就是函数指针,它指向实参所代表函数的入口地址
FILE是c语言为了具体实现对文件的操作而定义的一个包含文件操作相关信息的结构类型
定义数组的语句 int a[10] ;可简化为 num a ;定义如下:typedef int num [10];
文件指针fp++将意味着指向下一个FILE结构(如果存在)
打开文件由标准函数fopen()实现,其一般调用方式为:fopen(“文件名”,“文件打开方式”);
该函数有返回值。如果执行成功,函数将返回包含文件缓冲区等信息的FILE结构地址,赋值给文件fp,否则,返回NULL
文件名指出要对哪个具体文件进行操作,一般要指定文件的路径,如果不写出路径,则默认与应用程序的当前路径相同
文件路径若包含绝对完整路径,则定位子目录用的斜杠"“需要用双斜杠”\",因为c语言认为"“是转义符,双斜杠”\“表示了实际的”"
文件打开方式用来确定对打开的文件将进行什么操作,有"r",“w”,“a”,“r+”,“w+”,“a+”,若打开二进制文件,只需加后缀b
c语言允许同时打开多个文件,不同文件采用不同文件指针指示,但不允许同一个文件在关闭前被再次打开
关闭文件通过调用标准函数fclose()实现,该函数将返回一个整数,若该数为0表示正常关闭文件
c语言标准库stdio.h中提供了一系列文件的读写操作函数,常用的函数有 fgetc() fputc() fpus() fgets() fscanf() fprintf() fread() fwrite()
调用feof()来检测文件指针所指示文件的位置是否到了文件末尾
fgets()用来从文本文件中读取字符串,调用格式为:fgets(s,n,fp);
c语言标准库中也提供了一系列与文件指针的位置和状态有关的函数,有rewind() fseek() ftell() feof() ferror() clearerr()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值