38.指针与数组

数组名和指针之间有一个不同之处。指针式一个变量,因此,在C语言中,语句pa=a和paa++都是合法的。但数组名不是变量,因此,类似于a=pa和a++形式的语句式非法的。

当把数组名传递给一个函数时,实际上传递的是该数组第一个元素的地址。在被调用函数中,该参数是一个局部变量,因此,数组名参数必须是一个指针,也就是一个存储地址值的变量。我们可以利用该特性编写strlen函数的另一个版本,该函数用于计算一个字符串的长度。

/*  strlen函数:返回字符串s的长度  */
int strlen(char *s)
{
     int n;
     
     for (n = 0; *s != '\0'; s++)
         n++;
     return n;
}

因为s是一个指针,所以对其执行自增运算是合法的。执行s++运算不会影响到strlen函数的调用者中的字符串,它仅对该指针在strlen函数中的私有副本进行自增运算。因此,类似于下面这样的函数调用:

strlen("hello,world");    /*  字符串常量  */ 
strlen(array);            /*  字符数组array有100个元素  */
strlen(ptr);              /*  ptr是一个指向char类型对象的指针  */

都可以正确地执行。

在函数定义中,形式参数

char s[ ];

char *s;

是等价的。我们通常更习惯于使用后一种形式,因为它比前者更直观地表明了该参数是一个指针。如果将数组名传递给函数,函数可以根据情况判定是按照数组处理还是按照指针处理,随后根据相应的方式操作该参数。为了直观且恰当地描述函数,在函数中甚至可以同时使用数组和指针这两种表示方式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值