分类: LINUX
2009-04-02 21:56:26
C语言基本知识总结
C语言是计算机专业最为重要的知识,有了扎实的C语言基础,才能在学习计算机其他技术的过程中有大的收获.其中有关指针等知识掌握起来比较困难.现在就将C语言中的难点和重点知识做一总结,以使更多的C语言学习者打好基础.
一 指针
指针中保存的是另一个变量的地址变量
具体应用:
(一)指针说明
1> int *p
p是一个指针,指向一个整型数
2>int *p()
p是一个函数,返回一个指向整数的指针
3>int (*p)()
p是一个指针,该指针指向一个函数,这个函数返回一个整数。
4>int *p[]
p是一个数组,该数组的每一个元素是指向整数的指针。
5>int (*p)[]
p是一个指针,该指针指向一个数组,这个数组的每一个元素是一个整数。
6>int *(*p)()
p是一个指针,该指针指向一个函数,这个函数返回一个指向整数的指针。
(二)指针的初始化
1>通过符号&取变量;
2>把数组名赋给指针;
3>把函数名赋给指向函数的指针;
4>动态分配内存。
(三)指针与数组,函数的关系
1>对于一维数组int a[i]或指针int *a a+i指向a[i]
2>对于字符串char s[i]或指针char *s s+i指向第i个字符s[i]
3>对于二维数组int a[i][j] ,*a+j指向a[0][j];*(a+i)指向a[i][0];*(a+i)+j指向a[i][j]
4>对于字符串数组char p[i][j]或字符型指针数组char *p[i], *p+j指向第0个字符串的第j个字符;*(p+i)指向第i个字符串的第0个字符;*(p+i)+j指向第i个字符串的第j个字符。
5>对于指针数组int *a[i] a[i]指向变量i,即*a[i]=变量i(a[i]=&变量i)
6>对于struct XY (int x,,int *y)*p p是指向结构XY的指针
(*p).x或p->x是表示x的内容;
(*p).y或p->y是表示指针y的值(为地址);
*(*p).y或*p->y是表示y所指的内容;
&(*p).x或&p->x是表示x的地址
7>指向函数的指针
对于 void func(char *str)
{…}; //定义了一个函数
void (*p)(char*);//定义了一个函数指针
p=func; //让指针指向函数
则(*p)("…"); //用指针p可以调用函数func
8>指向多个不同函数的指针数组
对于void function_1() {…};
…
void function_4() {…}; //定义了四个函数
typedef void(*menu_fcn)();//定义了指向函数的指针
menu_fcn command[4]; //定义了指针数组
command[0]=function_1;
…
command[3]=function_4; //让指针数组指向四个函数
则command[0](); //用指针数组中的一个元素调用一个函数
二 C 语言的函数
1.用户自定义函数格式
类型 函数名(形式参数表)
参数说明
{
……
}
2.函数的调用方式
(1)传值方式
①传给被调用函数的是整型、长整型、浮点型或双精度型变量。被调用的函数得定义相应的变量为形参。
②传给被调用函数的是结构变量。被调用函数得定义结构变量为形参。
③传给被调用函数的是结构变量的成员。被调用函数得定义与该成员同类的变量为形参。
(2)传址方式
①传给被调用函数的是变量的地址。被调用函数得定义指针变量为形参。
②传给被调用函数的是数组的地址即数组名。被调用的函数得定义数组或指针变量为形参。
③传给被调用函数的是函数的地址即函数名称。被调用函数得定义指向函数的指针变量为形参。
④传给被调用函数的是结构的地址。被调用函数得定义结构指针为形参。
3.函数调用(传值方式)结果的返回
(1)返回的是数值
要求被调用的函数类型与接收返回值的变量类型相同。
(2)返回的是指针
要求被调用的函数是指针函数,其指向的类型与接收的指针变量指向类型相同。
(3)不返回任何值
被调用的函数是void型。