数组和指针

数组和指针

1、数组

数组标记实事上是一种变相的使用指针的形式。

Array=&array[0];//数组名是该数组的首地址

假设你是要编写一个对数组进行操作的函数。目的是要此函数返回数组内所有元素的和。。那么该如何调用:


Total=sums(muggle);//可能的调用


那么原型呢?实际参数是一个int的地址。应把它赋给一个指向int 指针的形式变量。

Int sums(int *ar);//相应的原型


函数从该参数中能得到的信息有:数组的首元素的地址。还有从地址的找到一个int 。

但是却不知道数组中元素的数量!

这种函数定义是有限制的。


Int sums(int *ar,int n);//更加适用的方法

这是第一个参数把数组地址和数组类型的信息传递给参数,第二个参数将数组中元素的个数传递给函数。此外:

在函数原型和函数定义的场合(并且也只有这两个场合中),可以用int *ar代替int ar[].。


Int sums(int ar[],int n);

无论在任何情况下,形式int *ar 都表示ar 是指向int 的指针。形式int ar[]也可以表示指向int的指针,但只是声明形式参量时才可以这样使用。

所以如果实际参数的一个数组名,那么形式参量必须是与之相匹配的指针。在(而且仅在)这种场合中,C对于int ar[] 和int *ar 作出同样的解释。即ar 是指向int 的指针。以下四种原型等价:


Int sum(int *ar,int n);

Int sum(int *,int n);

 

Int sum(in tar[],int n);

Int sum(int [],int n);

定义函数时,名称是不能省略的,因此,定义时以下两种形式是等价的:

Int sum(int *ar,int n){

   //代码

}

Int sum(int ar[] ,int n){

   //代码

}

2、指针

不能对未初始化的指针取值。例:

Int *pt;//未初始化的指针

*pt=5;//错误

把5存储在pt所指向的地址,但是由于pt没有初始化,它的值是随机的。故不知道5会存到什么位置,这个位置也许对系统危害不大,但可以会覆盖程序的数据和代码。造成程序崩溃。

因此,当创建一个指针时,系统只分配了用来存储指针本身的内存空间,并不会分配用来存放数据的内存空间。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值