谭浩强C语言8.3通过指针引用数组

一、所谓数组元素的指针就是数组元素的地址。

通过前边的学习我们已经了解到了什么是指针,已经指针的用法。

指针与地址是紧密联系的。我认为一般情况下,取地址&与指针*是反函数的关系。即他两个同事出现在一段代码中时,可以相互抵消。

&p[]:将p数组的收尾地址即p[0]的地址位置表示出来。

*p[]:将p数组的首元素地址的值表示出来。

二、在引用数组元素时指针的运算

在指针指向一个数组元素时,可以进行一下运算:

加一个整数:p++;p--;

两个指针相减,比如p1-p2(只有他两个指向同一个数组的元素中才有意义)

在我们定义一个数组时,一定会对他的数组类型进行说明,比如:int、float等,不同的字符类型,他们所占有的字节是不同的。这样,我们在进行地址的查找时就会发现p+1的值是随着数组的类型而改变的。int型数组他的指针所查找的的地址就是在p[0]的地址的基础上加四。比如char型数组,他就是在原来的地址的基础上加一。

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

(1)下标法:最常见的a[i];

(2)指针法:*(a+i)

其实上面两个表示方式所表示的数是相同的。

接着,我们对几个易混淆的概念进行分析

(1)p++使p指向下一个元素a[1].

         *p一般指的是得到首元素地址的值。

(2)*p++由于p前后的两个符号的运算级是相同的,所以正常运算就可以先把首元素的值提出然后再加一即可。

(3)*(p++)与*p++是相同的,见上文。

         *(++p)是先对p加一即对p的所代表的地址加上m*1,然后取值,其实得到的是p[1]的值。

四、用数组名作函数参数

int main()

{void fun(int arr[],int n);

int array[10];

fun(array,10);

return 0;

}

void fun(int arr[],int n)

{

}

在这里面array是实参数组名,arr是形参数组名。前边已经说过下标法与指针法虽然表示的形式不同但是所表达的意思是一样的。

所以void fun(int arr[],int n)可以写成void fun(int *arr,int n),他们两个所表达的意思是一样的。



实参类型变量名数组名
要求形参的类型变量名数组名或变量指针
传递的信息变量的值实参数组首元素的地址
通过函数调用是否能改变实参的值不能

需要注意的是,实参的数组名代表一个固定的地址,或者说指针常量,但是形参数组名不是一个固定的地址,而是按指针变量处理。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值