No.7-2《C语言程序设计》教案备注第七讲指针目1.掌握指针的含义、定义方法和初始化;的2.掌握指针的三种运算方法;要3.了解指针与数组、指针与字符串的关系求|4.掌握将命令行参数传递给主函数的方法;3小时学时划分组织形式讲授+自学+独立作业+上机实做重1.指针的含义、定义方法和初始化;点2.指针的运算;难|3.传递命令行参数;点[引题】上一次课,我们重点研究了数组,包括一维数组、多维数组和字符型数组的定义方法、存储形式、初始化和引用方法。通过学习,大家了解了,数组实质上就是把相同数据类型的数据组织在一起,连续存放在计算机内存区域中,内存区域的首地址,就是数组名。我们可以通过定义数组来准备计算机内存空间,通过初始化给数组中的不同元素进行赋值,而通过数组名【下标引用不同的元素进行各种处理。这就好比日常生活中为了解决把所有男同志都集中在同一所楼内办公,每一员工有一间办公室,首先应给不同房间编房间号,这就类似计算机标识变量位置的单元地址;然后把员工安排进不同房间,这就类似于初始化过程。由此,我们可以看出,对于C语言环境,不管是对变量还是对数组元素进行处理,首先必须对其进行定义,定义的过程就是告诉计算机按定义的数据类型和名称分配内存空间,并进行编址。然后必须进行初始化,初始化的过程实质上就是向存储单元内填充具体的数值。这就告诉我们,计算机内存单元的位置是通过计算机编的地址码来标识的。计算机在处理存储单元中的数据时,首先找到其地址,然后取出里面的数据进行处理。这就给了我们这样一个启发,如果在使用C语言编写程序时,我们人为地定义一种用来存储地址的特殊变量,然后通过对该变量进行处理,以实现快速访问计算机内存单元,实现数据的快速处理。这就给我们提出了这样一个问题,那就是,我们如何定义这种特殊变量?如何对其进行处理,以便实现快速访问计算机内存单元?这就是今天我们要重点讨论的问题,即书中第五章指针
《C 语言程序设计》教案 No.7-2 第七讲 指 针 备 注 目 的 要 求 1.掌握指针的含义、定义方法和初始化; 2.掌握指针的三种运算方法; 3.了解指针与数组、指针与字符串的关系; 4.掌握将命令行参数传递给主函数的方法; 学时划分 3 小时 组织形式 讲授+自学+独立作业+上机实做 重 点 难 点 1. 指针的含义、定义方法和初始化; 2. 指针的运算; 3. 传递命令行参数; [引题]上一次课,我们重点研究了数组,包括一维数组、多维数组和 字符型数组的定义方法、存储形式、初始化和引用方法。通过学习, 大家了解了,数组实质上就是把相同数据类型的数据组织在一起,连 续存放在计算机内存区域中,内存区域的首地址,就是数组名。我们 可以通过定义数组来准备计算机内存空间,通过初始化给数组中的不 同元素进行赋值,而通过数组名[下标]引用不同的元素进行各种处 理。这就好比日常生活中为了解决把所有男同志都集中在同一所楼内 办公,每一员工有一间办公室,首先应给不同房间编房间号,这就类 似计算机标识变量位置的单元地址;然后把员工安排进不同房间,这 就类似于初始化过程。由此,我们可以看出,对于 C 语言环境,不管 是对变量还是对数组元素进行处理,首先必须对其进行定义,定义的 过程就是告诉计算机按定义的数据类型和名称分配内存空间,并进行 编址。然后必须进行初始化,初始化的过程实质上就是向存储单元内 填充具体的数值。这就告诉我们,计算机内存单元的位置是通过计算 机编的地址码来标识的。计算机在处理存储单元中的数据时,首先找 到其地址,然后取出里面的数据进行处理。这就给了我们这样一个启 发,如果在使用 C 语言编写程序时,我们人为地定义一种用来存储地 址的特殊变量,然后通过对该变量进行处理,以实现快速访问计算机 内存单元,实现数据的快速处理。这就给我们提出了这样一个问题, 那就是,我们如何定义这种特殊变量?如何对其进行处理,以便实现 快速访问计算机内存单元?这就是今天我们要重点讨论的问题,即书 中第五章指针
第七讲指针No.7-3第五章指针5.1指针的基本概念二、含义用来存储所指对象的地址的特殊变量二、说明1.指针是用来存储所指对象地址的特殊变量;int x,a[10];px=&x;pa=a;2.指针所指对象:变量、数组及其元素、结构体和联合体;3.指针都有相应的数据类型,用来说明所指对象内存放的数据类型;int *px;char *pch,*pname;4.指针通常占4个字节:5.指针目标、目标变量和目标运算符指针目标:指针指向区域中存放的数据:目标变量:指针指向的变量;a[0]a的首地址地址运算符:&alll指针pa目标运算符:*x的地址a[9]变量xpx:指针变量指针px*px:指针目标&px:指针变量地址5.2指针的定义与初始化二、 定义int x,y,(一)一般形式px=&x,数据类型标识符*指针名;y=x,int*px;y=*px,char*pch,*pname;
第七讲 指 针 No.7-3 第五章 指 针 5.1 指针的基本概念 一、含义 用来存储所指对象的地址的特殊变量 二、说明 1.指针是用来存储所指对象地址的特殊变量; int x,a[10]; px=&x; pa=a; 2.指针所指对象:变量、数组及其元素、结构体和联合体; 3.指针都有相应的数据类型,用来说明所指对象内存放的数据类型; int *px; char *pch,*pname; 4.指针通常占 4 个字节; 5.指针目标、目标变量和目标运算符 指针目标:指针指向区域中存放的数据; 目标变量:指针指向的变量; 地址运算符:& 目标运算符:* px :指针变量 *px:指针目标 &px:指针变量地址 5.2 指针的定义与初始化 一、定义 (一)一般形式 数据类型标识符 *指针名; int *px; char *pch,*pname; 变量 x a[0] a[1] . a[9] a 的首地址 指针 pa y=*px; y=x; px=&x; int x,y; X 的地址 指针 px
No.7-4《C语言程序设计》教案(二)注意事项1.指针名的命名规则同用户自定义标识符:.2.同一行中可以定义多个同类型的指针,之间用逗号分开3.指针名前必须加“*”三、初始化(一)一般形式数据类型标识符*指针名=初始地址值:(二)注意事项1..初始化是针对指针变量;2.把变量地址赋给指针变量时,该变量事先必须已定义3.指针目标变量的数据类型必须与指针的数据类型一致:double x;intpx=&x;(/*数据类型不一致*/×)4.可以把一个指针的值赋给另一指针;一intx;int*p=&x;int*q=p;5.不能把一般的整数数据赋给指针,但可以初始化为空指针int*px=0;6.不能用动态型变量地址初始化一个静态或全局变量类型的指针:(三)应用举例指出下列个语句的执行情况#include<stdio.h>结果为:main()a=5int x,y,d;char c,*pa=5int*px=&x,int x,a[10];int a=5;&a=ffday=*px+1;int *px=&x,int*pa=&apa=ffdaprintf(%d"*px);int*pa=a,printf("a=%d\n",a);&pa=ffdcd=sqrt(double)*px);char*pc=&c;printf(**pa=%din"*pa);*px=0;printf("&a=%xln",&a);*px+=1;printf("pa=%xln",pa);(*px)++;printf("&pa=%xln",&pa)*px++;
《C 语言程序设计》教案 No.7-4 (二)注意事项 1.指针名的命名规则同用户自定义标识符; 2.同一行中可以定义多个同类型的指针,之间用逗号分开; 3.指针名前必须加“*”; 二、初始化 (一)一般形式 数据类型标识符 *指针名=初始地址值; (二)注意事项 1.初始化是针对指针变量; 2.把变量地址赋给指针变量时,该变量事先必须已定义; 3.指针目标变量的数据类型必须与指针的数据类型一致; double x; int px=&x; (/*数据类型不一致*/×) 4.可以把一个指针的值赋给另一指针; int x; int *p=&x; int *q=p; 5.不能把一般的整数数据赋给指针,但可以初始化为空指针; int *px=0; 6.不能用动态型变量地址初始化一个静态或全局变量类型的指针; (三)应用举例 指出下列个语句的执行情况: #include <stdio.h> main() { int a=5; int *pa=&a; printf(“a=%d\n”,a); printf(“*pa=%d\n”,*pa); printf(“&a=%x\n”,&a); printf(“pa=%x\n”,pa); printf(“&pa=%x\n”,&pa); } &pa=ffdc pa=ffda &a=ffda *pa=5 a=5 结果为: int x,y,d; char *pc=&c; int *pa=a; int *px=&x; int x,a[10]; char c; int *px=&x; y=*px+1; printf(“%d”,*px); d=sqrt((double)*px); *px=0; *px+=1; (*px)++; *px++;
No.7-5第七讲指针5.3指针的运算三种运算:算术运算关系运算赋值运算二、指针的算术运算(一)与整数加减运算1.形式p±n实际地址:(p)±n×sizeof(指针数据类型)2.含义指针指向当前指向位置的前或后方第n个数据位置3.说明计算结果取决于指针的数据类型(int *px)(float*pf)pf-2*(pf-2)px-2-*(px-2)pf-1px-1—*(pf-1)*(px-1)pf-*pfpx -*pxpf+1*(pf+1)px+1*(px+1)pf+22*(pf+2)px+2+*(px+2)
第七讲 指 针 No.7-5 5.3 指针的运算 三种运算: 算术运算 关系运算 赋值运算 一、指针的算术运算 (一)与整数加减运算 1.形式 p±n 实际地址: (p)±n×sizeof(指针数据类型) 2.含义 指针指向当前指向位置的前或后方第 n 个数据位置 3.说明 计算结果取决于指针的数据类型 (int *px) px px+1 px+2 px-1 px-2 *px *(px+1) *(px+2) *(px-1) *(px-2) (float *pf) *pf *(pf+1) *(pf+2) *(pf-1) *(pf-2) pf pf+1 pf+2 pf-1 pf-2
No.7-6《C语言程序设计》教案(二)加1和减1运算intx, y,*px,1.含义px=&x,加1:指向下一个数据位置/*y=*(px++)*/y=*px++,/*y=*(++px)*/y=*++px;减1:指向前一个数据位置/*先赋值,后加1*/y=(*px)++;2.举例/*y=x++*/y=++(*px),(三)指针相减运算两个指针之间数据的个数px-py=((px)-(py))/sizeof(指针目标变量的数据类型)px=2048,py=1024,目标变量为double型px-py=(2048-1024)/8=128程序举例:使用指针编程实现,统计输入字符串中的字符个数#include<stdio.h>mainO(char buf[256];char*p;p=buf;printf(ln Enter a string:");scanf(%s",buf);while(*p++);printf("In The string length:%d",p-buf-1);1二、关系运算两个相同数据类型的指针之间进行关系运算<, ==, <=, >, >=, I=三、指针的赋值运算1.把变量的地址赋给与其具有相同数据类型的指针intx,*px;px=&x;2.相同类型的两指针相互赋值
《C 语言程序设计》教案 No.7-6 (二)加 1 和减 1 运算 1.含义 加 1:指向下一个数据位置 减 1:指向前一个数据位置 2.举例 (三)指针相减运算 两个指针之间数据的个数 px-py=((px)-(py))/sizeof(指针目标变量的数据类型) px=2048,py=1024,目标变量为 double 型 px-py=(2048-1024)/8=128 程序举例: 使用指针编程实现,统计输入字符串中的字符个数 #include <stdio.h> main() { char buf[256]; char *p; p=buf; printf(“\n Enter a string:”); scanf(“%s”,buf); while(*p++); printf(“\n The string length: %d”,p-buf-1); } 二、关系运算 两个相同数据类型的指针之间进行关系运算 <,==,<=,>,>=,!= 三、指针的赋值运算 1.把变量的地址赋给与其具有相同数据类型的指针 int x, *px; px=&x; 2.相同类型的两指针相互赋值 int x, y, *px; px=&x; y=*px++; /*y=*(px++)*/ y=*++px; /*y=*(++px)*/ y=(*px)++; /*先赋值,后加 1*/ y=++(*px); /*y=x++*/