指针1.docx

上传人:b****9 文档编号:28754888 上传时间:2023-07-19 格式:DOCX 页数:7 大小:15.96KB
下载 相关 举报
指针1.docx_第1页
第1页 / 共7页
指针1.docx_第2页
第2页 / 共7页
指针1.docx_第3页
第3页 / 共7页
指针1.docx_第4页
第4页 / 共7页
指针1.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

指针1.docx

《指针1.docx》由会员分享,可在线阅读,更多相关《指针1.docx(7页珍藏版)》请在冰豆网上搜索。

指针1.docx

指针1

一、指针、指针变量

二、指针与数组

1、指向数组元素的指针

inta[10];

int*p;

可以赋值为:

p=&a[0]

或者p=a

2、通过指针引用数组元素

如果p的初值为&a[0],则:

(1)p+i和a+i就是a[i]的地址,或者说,它们指向a数组的第i个元素。

(2)*(p+i)或*(a+i)是p+i或a+i所指向的数组元素,即a[i]。

(3)指向数组的指针变量也可以带下标,如p[i]与*(p+i)。

a.下标法。

如a[i]形式。

b.指针法。

如*(a+i)或者*(p+i)。

输出数组中的全部元素。

(1)下标法:

#include

voidmain()

{inta[10];

inti;

for(i=0;i<10;i++)

scanf(“%d”,&a[i]);

printf(“\n”);

for(i=0;i<10;i++)

printf(“%d”,a[i]);

printf(“\n”);

}

(2)通过数组名计算数组元素地址,找出元素的值。

#include

voidmain()

{inta[10];

inti;

for(i=0;i<10;i++)

scanf(“%d”,&a[i]);

printf(“\n”);

for(i=0;i<10;i++)

printf(“%d”,*(a+i));

printf(“\n”);

}

(3)用指针变量指向数组元素。

#include

voidmain()

{inta[10];

inti,*p;

for(i=0;i<10;i++)

scanf(“%d”,&a[i]);

printf(“\n”);

for(p=a;p<(a+10);p++)

printf(“%d”,*p);

printf(“\n”);

}

通过指针变量输出a数组的10个元素。

#include

voidmain()

{inta[10],i,*p;

p=a;

for(i=0;i<10;i++)

scanf(“%d”,p++);

printf(“\n”);

for(i=0;i<10;i++,p++)

printf(“%d”,*p);

printf(“\n”);

}

观察结果对否?

三、用数组名作函数参数

例:

将数组a中n个整数按相反顺序存放。

#include

voidmain()

{voidinv(intx[],intn)

inti,a[10]={3,7,9,11,0,6,7,5,4,2}

printf(“theoriginalarray:

\n”);

for(i=0;i<10;i++)

printf(“%d,”,a[i]);

printf(“\n”);

inv(a,10);

printf(“thearrayhasbeeninverted:

\n”);

for(i=0;i<10;i++)

printf(“%d,”,a[i]);

printf(“\n”);

}

voidinv(intx[],intn)

{inttemp,i,j,m=(n-1)/2;

for(i=0;i<=m;i++)

{j=n-1-i;

temp=x[i];x[i]=x[j];x[j]=temp;}

return;

}

或者:

voidinv(int*x,intn)

{int*p,temp,*i,*j,m=(n-1)/2;

i=x;j=x+n-1;p=x+m;

for(;i<=p;i++,j--)

{temp=*i;*i=*j;*j=temp;}

return;

}

在函数中调用数组中的元素的值,实参与形参的对应关系有4种:

(1)形参和实参都用数组名。

(2)实参用数组名,形参用指针变量。

(3)实参形参都用指针变量。

(4)实参为指针变量,形参为数组名。

四、指针与多维数组

定义:

inta[3][4];

可以把它看成3个元素(a[0],a[1],a[2])的一维数组,但每个元素又是一个含有4个元素的一维数组。

二维数组的数组名是二维数组的0行首地址;如a+1是跳过一行而不是一个元素。

行指针:

加1跳过一行的指针;指向一整行。

列指针:

加1跳一个元素的指针;指向一个元素,并且只有列指针才能指向元素。

二维数组数组名是一个行指针。

若a是一个二维数组,则有:

(1)a+i是行指针,指向行号为i的一整行,若对它加1则指到下一行;

(2)*(a+i)和a[i]相同,都是一个列指针即指向的是一个元素,若对它们加1则指到下一个元素。

即a[i][0]的地址。

(3)*(a+i)+j和a[i]+j相同,都是元素a[i][j]的地址,即与&a[i][j]等价。

(4)*(*(a+i)+j)、*(a[i]+j)、(*(a+i))[j]和a[i][j]相同,都表示元素a[i][j]本身。

例:

用指针变量输出二维数组元素的值:

inta[3][4];

int*p;

for(p=a[0];p

printf(”%d”,*p);

输出、排序

数组指针;课本249页例10.13、14题

 

字符串与指针:

课本252例10.17

 

指向函数的指针:

定义形式:

数据类型(*指针变量名)()

例如:

求a和b的大数。

返回指针的函数:

数据类型*函数名(参数表)

接上例。

程序填空:

函数longfun2(char*str)的功能是:

自左至右顺序取出非空字符串str中的数字字符,形成一个十进制(最多8位)。

函数为:

longfun2(char*str)

{

inti=0;

longk=0;

char*p=str;

while(*p!

=’\0’&&

(1))

{if(*p>=’0’&&*p<=’9’)

{k=

(2)+*p-’0’;

++i;

}

(3);

}

returnk;

}

2.本函数输入n(<1000)个整数到指定数组,求该数组中最大元素的值和此元素的下标,最大元素值以函数值返回,此元素的下标通过指针形参带回调用处。

#include

#defineMAXLINE1000

intmaxindex(inta[],int*index)

{inti,n;

do{

print(”pleaseinputn\n”);

scanf(”%d”,&a[i]);

}while();

for(i=0;i

scanf(”%d”,&a[i]);

*index=0;

for(i=1;i

if()*index=i;

return;

}

3.写一个函数,求一个字符串的长度。

在main函数中输入字符串,并输出其长度。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1