C语言指针1

发布时间:2021-06-05

第七章 指针1指针的优势1、从函数得到多个返回值 —— 传地址的概念 2、对字符串的灵活处理(排序、查找、连接、 输出) 3、构造链表、树、图等数据结构

1/14

指针内存区:…… 03H 00H 06H 00H 0AH 00H …… 00H 20H …… 变量i

一、内存的概念:1.计算机内存:由若干个存储单元(字节)构 2000H 成[字节的线性序列] 2001H2002H 2.存储单元的内容和地址: 2003H 每个存储单元都有一个编 2004H 2005H

变量j变量k 变量p1

号,此编号称为内存单元的 地址;内存单元中的数据 (二进制),称为内存单元 的内容。

3010H 3011H

2/14

指针内存区:…… 03H 00H 06H 00H 0AH 00H …… 00H 20H …… 变量i

二、变量与内存的关系:

1 .变量: 变量具有变量名和变量值;变 量还具有类型。 2.变量与内存的关系: 变量的值存放在内存单元中,

2000H 2001H 2002H 变量名对应其值所在内存区的 2003H 首地址;(存储区第一个存储单元 2004H 2005H 的地址)

变量j变量k 变量p1

3.直接访问: 3010H 通过变量地址对变量值的访问 3011H 称为直接访问[通过变量名得到首 地址,根据变量类型取若干单元的 内容] 。

3/14

指针内存区:…… 2000H 2001H 2002H 2003H 2004H 2005H 03H 00H 06H 00H 0AH 00H …… 00H 20H …… 变量i

三、变量的指针和指针变量:1 .变量的指针:变量对应内存区的首地址称为变 量的指针。[指针即地址]

2.指针变量:它的内容为某个地址 ——存放指针的变量

变量j变量k 变量p1

3.间接访问:

通过指针变量得到一个地址,再 3010H 得到该地址的内容 3011H

4.变量与指针变量的差别:都是变量,但内容不同

5/14

四、指针变量的定义 1、定义的一般格式: 数据类型说明符 *指针变量名; 说明: 1)一个指针变量只能指向同一类型 (“数据类型说明符”)的变量; 2)变量名前的“*”表示该变量为指针类型变量; 3)指针变量的初始化(取址操作符&、同类型) 例:int *p1; 指向整型变量的指针变量p1; char *p2; 指向字符型变量的指针变量p2; 指针变量p1所指变量:整型变量*p1 [两个变量: 指针变量p1及所指变量*p1]6/14

2、指针变量的引用:指针变量的初始化:p = &i; 或 p=a; /* a为数组名 */指针变量所指变量的内容

引用形式:指针变量名 —— 指针变量的内容(一个地址)*指针变量名 ——

相关运算符1) &:取地址运算符(变量或数组元素适用—取变量的首地址)2) *:指针运算符(指针变量适用;注意与定义时的*不同) 3)=:赋值运算符 [p、*p均可,含义不同] 4)算术运算符+、-及++、-- [p、*p均可,含义不同] 例:&a 为变量a的地址, *p 为指针变量 p所指向的变量 执

行p=&a;后,a 等价于*p a 等于 *&a; p 等于 &*p7/14

例:int a=5; a++;

a,*p; 指针变量的初始化:指向某个具体对象 变量的初始化 变量a的值(内容)增1:a的值为6

p=&a;

(*p)++;p++; *(p++);

变量*p(即a)的值增1:为7指针变量p指向下一个整型变量 使用后再加

8/14

例:输入a和b两个整数,按先大后小的顺序输出a和b。main( ) { int a、b并未交换值, 仅仅改变了p1和 scanf(“%d,%d”,&a,&b); p2的值 p1=&a; p2=&b; 实际输出的是 if (a<b) {p=p1; p1=p2; p2=p;} 变量b、a的值 (见下图) printf(“a=%d,b=%d\n”,a,b); *p1,*p2,*p,a,b; } a

printf(“max=%d,min=%d\n”,*p1,*p2); p1 p1 a p &b p &a 5 p2 p2 b

5b

&b

9

&a

9

9/14

3、指针变量作为函数参数

变量——传值;指针变量——传地址 [实参、形参均为指针类型] 例:编制函数swap及指针变量,对输入的两个整数 按大小顺序输出。(函数swap完成排序,主函数完成输 入、输出)

10/14

如果我们将swap( )函数作如下改变,结果将怎样呢?swap(p1,p2)

int

*p1,*p2;p1=p2; int

地址传递也是单向传递!

{ int *p; p=p1; main( ) { int a,b; *pointer_1,*pointer_2; pointer_2=&b; p2=p; }

scanf(“%d,%d\n”,&a,&b);pointer_1=&a; if (a<b) swap(pointer_1,pointer_2);11/14

printf(“\n%d,%d\n”,*pointer_1,*pointer_2);}

关于地址传递的进一步说明:1.定义 n 个变量,并让 n 个指针变量指向 它们; 2.使用地址(指针)作为实参; 3.在函数中使用形参指针改变变量的值; 4.在主函数中可使用改变后的值;

12/14

指针1(总结) 地址和指针的概念(指针即地址) 变量的指针和指向变量的指针变量(指针变 量的定义、引用:&、*) 指针变量作为函数参数(地址传递)

13/14

作业:9.1

14/14

C语言指针1.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219