数组,指针与函数

一.数组作为函数参数

1.数组元素可以用作函数实参,用法与变量相同,向形参传递数组元素的值。(单向传递)
2.数组名可以用作函数的实参和形参,传递的是数组第一个元素的地址。(可利用这一特点改变实参数组的值)
3.形参数组可不指定其大小,因为形参数组首元素和实参数组首元素具有同一地址,定义时在数组名后跟一个空的方括号。
4.多维数组名作函数参数时,对形参的定义可以省略第一维的大小。(int array [ ][8])

二.通过指针引用数组

1.指针变量既可以指向变量,也可以指向数组元素(把某一元素的地址放到一个指针变量中)。所谓数组元素的指针就是数组元素的地址。
2.引用数组元素可用下表法和指针法。(使用指针法使目标程序质量高,占用内存少,运行速度快)
例:int a[10]; int p; p=&a[0]或p=a;
或者直接写成int p=a;
3.当指针指向一个数组元素时,p+1指向同一数组中下一个元素,p-1指向同一数组中的上一个元素,即
加或减一个数组元素所占用的字节数。
(int,long,float—d=4;char—d=1)
例:p的初值为&a[0],则 * ( p+1)= (a+i)=a[5]([ ]实际上是变址运算符,a[ i]即计算a+i)
4.如果指针变量p1和p2都指向同一数组中的元素,如执行p2-p1,结果是
两个地址之差除以数组元素长度*,即求出了元素间的相对距离。(注意两个地址不能相加)
5.指针引用数组的三种方法:
输入:
for(i=0;i<10;i++)
A.scanf("%d",&a[i]);
B.scanf("%d"a+i);
C.scanf("%d",p);
打印:
A.for(i=0;i<10;i++)
printf("%d",a[i]);
B.for(i=0;i<10;i++)
printf("%d",*(a+i);
C.用指针指向当前数组元素
nt *p
for(p=a;p<(a+10);p++)
printf("%d",*p);
//p++高效简洁,不能a++,变量才可以++
6.用数组名做函数参数,将形参数组名作为指针变量来处理。
例://实参用数组名a,形参可用数组名或指针变量名
a.形参和实参都用数组名
int main()
{int a[10];
f(a);}
int f(int x[ ])//共用一段内存
b.实参数组名,形参指针变量
int main()
{int a[10];
f(a);}
int f(int *x)//可改变x的值指向a任一元素
c.实参形参都用指针变量
int main()
{int a[10];
*p=a;
f§;}
int f(int *x)//p为一变量易更改
7.通过指针引用多元数组
A.多维数组元素的地址(以int a[3][4]为例)

表现形式含义
a二维数组名,指向一维数组a[0],即0行起始地址2000
a[0],*(a)0行0列元素地址2000
a+1,&a[1]1行起始地址2016
a[1],*(a+1)1行0列元素a[1][0]地址2016
a[1]+2,*(a+1)+2,&a[1][2]1行2列元素a[1][2]地址2024
* a[1]+2,* (*(a+1)+2),a[1][2]1行列元素a[1][2]值13

B.指向多维数组元素的指针变量
int *p指向数组元素
int (*p)[m列]指向m个元素构成的一维数组

三.指针引用字符串

1.字符串引用方式
a.用字符数组存放一个字符串(%s输出字符串,%c输出字符元素)
b.用字符指针变量指向一个字符串常量
例:char *a=“I love you!”;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值