指针和指针 变量
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上一页 下一页 返回
9.2 指针变量的定义与应用
(2) 指针的赋值与比较 例9.1 main( ) { int a,b; int *p1,*p2; a=10;b=20; p1=&a;p2=&b; printf(“%d %d\n”,*p1,*p2); p1=p2; *p2=5; printf (“%d %d\n”,*p1,*p2); }
1)可用运算符&求变量的地址 用赋值语句使指针变量指向变量,例如: p1=&i; (表示将变量i的地址赋给指针变量) p2=&j; (表示将变量j的地址赋给指针变量) 则p1、p2分别指向了变量i、j。如图9-2所示。 2)可用运算符“*”引用指针变量
“*”运算符用于某个地址(如指针变量)之前,表示取*后地 址中的内容。
上一页 下一页 返回
9.3 数组的指针和指向数组的指针变量
该程序在进行函数调用时,将实参a的值(即数组的起始地址) 传给形参p,指针p获得了数组的起始地址,通过指针的移动求出 数组中元素的最小值。如图9-10所示。
上一页 下一页 返回
9.3 数组的指针和指向数组的指针变量
方法2:实参和形参均为指向数组元素基类型的指针变量。 int fmin(int *p,int n) { int i,m;
上一页 下一页 返回
9.3 数组的指针和指向数组的指针变量
int fmin(int *p, int n) { int i,m;
m=*p; for(i=0;i<n;i++) if (m>*(p+i))
m=*(p+i); return(m);} main( ) { int a[10],min,i; for(i=0;i<n;i++) scanf(“%d”,&a[i]); min=fmin(a,10); printf(“min=%d”,min); }
两个相同基类型的指针变量可以进行减法运算。设p1、p2均 为指向整型变量的指针变量,且p1=2000,p2=2006,则p2-p1=3。 3其实是(2006-2000)/2得到的结果,表示两个指针所指对象之间
指针基类型的元素个数。系统会根据类型自动地进行地址运算, 并不是两个地址的直接相减。
上一页 下一页 返回
int a[10],*p=a;或 int a[10],*p=&a(0); 只要移动指针p,就可访问数组a的任一元素。如图9-8所示。
上一页 下一页 返回
9.3 数组的指针和指向数组的指针变量
9.3.3数组名作为函数的参数
数组名可以作为函数的形参或实参。如果要将一个一维数组 的首地址传给函数,实参可以是数组名或存放有数组首地址的指 针变量。而形参可以为一个一维数组或基类型为数组元素的指针 变量。 例9.6 编一个函数,求数组a中n个整数的最小值。 方法1:形参为数组名,实参为指针。
下一页 返回
9.3 数组的指针和指向数组的指针变量
9.3.2通过指针引用数组元素
通过指针引用数组元素,必须要定义指向数组的指针,例如: int a[10]; int *p; p=a; 以上语句定义了一个长度为10的一维整型数组,同时还定义
了一个指针变量p,其基类型必须和所指向的数组类型相同,数组 名a代表数组的首地址。由于数组的首地址就是数组元素a[0]的地 址,故语句p=a;还可以是p=&a[0]; ,从而使p指向数组a的第0个元 素。变量在定义的同时可以赋初值,上面三个语句还可以等价写 成:
上一页 下一页 返回
9.2 指针变量的定义与应用
(3) 指针的算术运算
1)指针可以与整型数相加减
若指针变量p当前指向2000单元,其基类型是整型,则以下操 作是合法的。
p=pLeabharlann Baidu1
/* p指向2002单元 */
p=p+2;
/* p指向2006单元 */
p=p-1;
/* p指向2004单元 */
2)指针的减法运算
一般地,如果在程序中定义了一个变量,则编译时系统会根 据变量的类型给变量分配一定长度的字节数。实际上,内存中每 个字节都有一个编码,这个编码就是该字节的地址。假设程序已 定义了二个整型变量i、j;二个实型变量a、b;二个字符型变量c1、 c2,编译分配如图9-1所示
返回
9.2 指针变量的定义与应用
9.2.1 指针变量的定义与相关运算
1.指针变量的定义 指针变量的定义其实就是把存放地址的变量定义成“指针类
型”。一般格式为: 类型名 *指针变量名;
2.指针变量的相关运算 (1) 指针运算符 有两个相关的运算符: &:取地址运算符。 *:指针运算符(或称“间接访问”运算符)。
下一页 返回
9.2 指针变量的定义与应用
9.2 指针变量的定义与应用
9.2.2指针变量作函数参数
函数的参数是一般变量或常数时,函数实参向形参是单向值 传递。函数的参数是数组名时,则将实参数组名传递给形参数组 名,数组名表示数组中第一个元素的地址,故这种传递是地址传 递。函数参数还可以是指针变量,其作用是将变量的地址传到另 一函数中去。下面用指针变量作为函数参数来实现两个整数按由 大到小的顺序输出。
第9章指 针
9.1 指针和指针变量的概念 9.2 指针变量的定义与应用 9.3 数组的指针和指向数组的指针变量 9.4 字符串的指针和指向字符串的指针变量 9.5 返回指针值的函数 9.6 指针数组与主函数main( )的形参 9.7 函数的指针和指向函数的指针变量
9.1 指针和指针变量的概念
为了形象地描述内存单元的数据在存取过程中单元地址的变 化情况,引入了指针这一概念。其实,指针就是地址。
上一页 返回
9.3 数组的指针和指向数组的指针变量
9.3.1概述
C语言中数组与指针有着密切的联系,在编程时完全可以用指 针代替下标引用数组及数组元素,且使数组的引用更为灵活、有 效。当一个数组被定义后,程序会按照其类型和长度在内存中为 数组分配一块连续的存储单元。此时,数组名成为符号常量,其 值为数组在内存中所占用单元的首地址,也就是说数组名代表数 组的首地址。指针是用来存放地址的变量,当某个指针存放数组 名或数组中第一个元素的地址时,可以说该指针指向了这个数组, 这样我们可以通过指针间接访问数组中的元素。
9.2 指针变量的定义与应用
(2) 指针的赋值与比较 例9.1 main( ) { int a,b; int *p1,*p2; a=10;b=20; p1=&a;p2=&b; printf(“%d %d\n”,*p1,*p2); p1=p2; *p2=5; printf (“%d %d\n”,*p1,*p2); }
1)可用运算符&求变量的地址 用赋值语句使指针变量指向变量,例如: p1=&i; (表示将变量i的地址赋给指针变量) p2=&j; (表示将变量j的地址赋给指针变量) 则p1、p2分别指向了变量i、j。如图9-2所示。 2)可用运算符“*”引用指针变量
“*”运算符用于某个地址(如指针变量)之前,表示取*后地 址中的内容。
上一页 下一页 返回
9.3 数组的指针和指向数组的指针变量
该程序在进行函数调用时,将实参a的值(即数组的起始地址) 传给形参p,指针p获得了数组的起始地址,通过指针的移动求出 数组中元素的最小值。如图9-10所示。
上一页 下一页 返回
9.3 数组的指针和指向数组的指针变量
方法2:实参和形参均为指向数组元素基类型的指针变量。 int fmin(int *p,int n) { int i,m;
上一页 下一页 返回
9.3 数组的指针和指向数组的指针变量
int fmin(int *p, int n) { int i,m;
m=*p; for(i=0;i<n;i++) if (m>*(p+i))
m=*(p+i); return(m);} main( ) { int a[10],min,i; for(i=0;i<n;i++) scanf(“%d”,&a[i]); min=fmin(a,10); printf(“min=%d”,min); }
两个相同基类型的指针变量可以进行减法运算。设p1、p2均 为指向整型变量的指针变量,且p1=2000,p2=2006,则p2-p1=3。 3其实是(2006-2000)/2得到的结果,表示两个指针所指对象之间
指针基类型的元素个数。系统会根据类型自动地进行地址运算, 并不是两个地址的直接相减。
上一页 下一页 返回
int a[10],*p=a;或 int a[10],*p=&a(0); 只要移动指针p,就可访问数组a的任一元素。如图9-8所示。
上一页 下一页 返回
9.3 数组的指针和指向数组的指针变量
9.3.3数组名作为函数的参数
数组名可以作为函数的形参或实参。如果要将一个一维数组 的首地址传给函数,实参可以是数组名或存放有数组首地址的指 针变量。而形参可以为一个一维数组或基类型为数组元素的指针 变量。 例9.6 编一个函数,求数组a中n个整数的最小值。 方法1:形参为数组名,实参为指针。
下一页 返回
9.3 数组的指针和指向数组的指针变量
9.3.2通过指针引用数组元素
通过指针引用数组元素,必须要定义指向数组的指针,例如: int a[10]; int *p; p=a; 以上语句定义了一个长度为10的一维整型数组,同时还定义
了一个指针变量p,其基类型必须和所指向的数组类型相同,数组 名a代表数组的首地址。由于数组的首地址就是数组元素a[0]的地 址,故语句p=a;还可以是p=&a[0]; ,从而使p指向数组a的第0个元 素。变量在定义的同时可以赋初值,上面三个语句还可以等价写 成:
上一页 下一页 返回
9.2 指针变量的定义与应用
(3) 指针的算术运算
1)指针可以与整型数相加减
若指针变量p当前指向2000单元,其基类型是整型,则以下操 作是合法的。
p=pLeabharlann Baidu1
/* p指向2002单元 */
p=p+2;
/* p指向2006单元 */
p=p-1;
/* p指向2004单元 */
2)指针的减法运算
一般地,如果在程序中定义了一个变量,则编译时系统会根 据变量的类型给变量分配一定长度的字节数。实际上,内存中每 个字节都有一个编码,这个编码就是该字节的地址。假设程序已 定义了二个整型变量i、j;二个实型变量a、b;二个字符型变量c1、 c2,编译分配如图9-1所示
返回
9.2 指针变量的定义与应用
9.2.1 指针变量的定义与相关运算
1.指针变量的定义 指针变量的定义其实就是把存放地址的变量定义成“指针类
型”。一般格式为: 类型名 *指针变量名;
2.指针变量的相关运算 (1) 指针运算符 有两个相关的运算符: &:取地址运算符。 *:指针运算符(或称“间接访问”运算符)。
下一页 返回
9.2 指针变量的定义与应用
9.2 指针变量的定义与应用
9.2.2指针变量作函数参数
函数的参数是一般变量或常数时,函数实参向形参是单向值 传递。函数的参数是数组名时,则将实参数组名传递给形参数组 名,数组名表示数组中第一个元素的地址,故这种传递是地址传 递。函数参数还可以是指针变量,其作用是将变量的地址传到另 一函数中去。下面用指针变量作为函数参数来实现两个整数按由 大到小的顺序输出。
第9章指 针
9.1 指针和指针变量的概念 9.2 指针变量的定义与应用 9.3 数组的指针和指向数组的指针变量 9.4 字符串的指针和指向字符串的指针变量 9.5 返回指针值的函数 9.6 指针数组与主函数main( )的形参 9.7 函数的指针和指向函数的指针变量
9.1 指针和指针变量的概念
为了形象地描述内存单元的数据在存取过程中单元地址的变 化情况,引入了指针这一概念。其实,指针就是地址。
上一页 返回
9.3 数组的指针和指向数组的指针变量
9.3.1概述
C语言中数组与指针有着密切的联系,在编程时完全可以用指 针代替下标引用数组及数组元素,且使数组的引用更为灵活、有 效。当一个数组被定义后,程序会按照其类型和长度在内存中为 数组分配一块连续的存储单元。此时,数组名成为符号常量,其 值为数组在内存中所占用单元的首地址,也就是说数组名代表数 组的首地址。指针是用来存放地址的变量,当某个指针存放数组 名或数组中第一个元素的地址时,可以说该指针指向了这个数组, 这样我们可以通过指针间接访问数组中的元素。