C语言编程要懂得的重要概念

来源:本站
导读:目前正在解读《C语言编程要懂得的重要概念》的相关信息,《C语言编程要懂得的重要概念》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《C语言编程要懂得的重要概念》的详细说明。
简介:C语言的重要概念

C语言的重要概念

一、C语言的指针

1.指针说明

指针是包含另一变量的地址变量。

(1)int *p

p是一个指针,指向一个整形数。

(2)int *p()

p是一个函数,该函数返回一个指向整数的指针。

(3)int (*p)()

p是一个指针,该指针指向一个函数,这个函数返回一个整数。

(4)int *p[]

p是一个数组,该数组的每一个元素是指向整数的指针。

(5)int (*p)[]

p是一个指针,该指针指向一个数组,这个数组的每一个元素是一个整数。

(6)int *(*p)()

p是一个指针,该指针指向一个函数,这个函数返回一个指向整数的指针。

2.指针的初始化(赋地址)

(1)通过符号&取变量(包括结构变量、数组第一个元素)的地址赋给指针;

(2)把数组名赋给指针;

(3)把函数名赋给指向函数的指针;

(4)动态分配内存

例:struct c{double r,i;};

struct c *p;

p=(struct c *)malloc(sizeof(struct c));

3.指针与数组、函数的关系

(1)对于一维数组 int a或指针 int *a

a+i 指向 a

(2)对于字符串 char s或指针 char *s

s+i 指向第 i个字符 s

(3)对于二维数组int a[j]

*a+j 指向 a[0][j]

*(a+i) 指向 a[0]

*(a+i)+j 指向 a[j]

例:对于 a[2][3]={1,2,3,4,5,6,}; 有 *(*(a+1)+1)=5;

(4)对于字符串数组char p[j] 或字符型指针数组char *p

*p+j 指向第 0个字符串的第 j个字符

*(p+i) 指向第 i个字符串的第 0个字符

*(p+i)+j 指向第 i个字符串的第 j个字符

例:对于 *p[]={"ABC","DEF"}; 有 *(*(p+1)+1)='E';

例:对于 char p[][3]={"ABC","DEF"}; 有 *(*(p+1)+1)='E';

(5)对于指针数组int *a

a指向 变量i

即 *a=变量i 或 a=&变量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](); //用指针数组中的一个元素调用一个函数

4.指针的分类

(1)近指针(near):

近指针为16位指针,它只含有地址的偏移量部分。近指针用于不超过64K 字节的单个数据段或代码段。在微、小和中编译模式下产生的数据指针是近指针(缺省状态);在微、小和中编译模式下产生的码指针(指向函数的指针)是近指针(缺省状态)。

(2)远指针(far)

远指针为32位指针,指针的段地址和偏移量都在指针内。可用于任意编译模式。每次使用远指针时都要重装段寄存器。远指针可寻址的目标不能超过64K ,因为远指针增减运算时,段地址不参与运算。在紧凑、大和巨模式下编译产生的数据指针是远指针(缺省状态)。

(3)巨指针(huge)

巨指针为32位指针,指针的段地址和偏移量都在指针内。可用于任意编译模式。远指针寻址的目标可以超过64K 。巨指针是规则化的指针。

5.指针的转换

(1)远指针转换成巨指针

使用以下函数

void normalize(void far * * p)

{

*p=(void far *)(((long)*p&0xffff000f)+(((long)*p&0x0000fff00<<12));

}

6.指针的使用

(1)将浮点数转换成二进制数

float ff=16.5;

unsigned char *cc;

(float*)cc=&ff;

//此时cc的内容为"00008441"

//即cc第一个字节=0;第二个字节=0;第三个字节=0x84;第四个字节=0x41;

(2)将二进制数转换成浮点数

float ff;

unsigned char *cc;

cc=(unsigned char*)malloc(4);

cc=(unsigned char*)&ff;

*(cc+0)=0;

*(cc+1)=0;

*(cc+2)=0x84;

*(cc+3)=0x41;

//此时ff=16.5

free(cc);

二、C 语言的函数

1.用户自定义函数格式

类型 函数名(形式参数表)

参数说明

{

……

}

2.函数的调用方式

(1)传值方式

①传给被调用函数的是整型、长整型、浮点型或双精度型变量。被调用的函数得定义相应的变量为形参。

②传给被调用函数的是结构变量。被调用函数得定义结构变量为形参。

③传给被调用函数的是结构变量的成员。被调用函数得定义与该成员同类的变量为形参。

(2)传址方式

①传给被调用函数的是变量的地址。被调用函数得定义指针变量为形参。

②传给被调用函数的是数组的地址即数组名。被调用的函数得定义数组或指针变量为形参。

③传给被调用函数的是函数的地址即函数名称。被调用函数得定义指向函数的指针变量为形参。

④传给被调用函数的是结构的地址。被调用函数得定义结构指针为形参。

3.函数调用(传值方式)结果的返回

(1)返回的是数值

要求被调用的函数类型与接收返回值的变量类型相同。

(2)返回的是指针

要求被调用的函数是指针函数,其指向的类型与接收的指针变量指向类型相同。

(3)不返回任何值

被调用的函数是void型。

提醒:《C语言编程要懂得的重要概念》最后刷新时间 2024-03-14 01:01:56,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《C语言编程要懂得的重要概念》该内容的真实性请自行鉴别。