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