数组形参的表达方式

2015-09-27  本文已影响168人  fever105

数组形参的表达方式

设计一个有数组作为参数的函数,代表数组的形参有两种表达方式:指针 vs 数组名。从作用上来讲,两者完全相同,可以互换。但它们背后所隐含的区别更值得了解。

接下来,我们要自己设计并实现一个strlen()函数,作用同标准库中的同名函数一样,即返回一个字符串的长度。

指针作为形参

size_t mystrlen(char *s)
{
    int count = 0;
    
    while (*(s++) != '\0') {
        count++;
    }
    
    return count;
}

客户端程序如下:

size_t mystrlen(char *s);

int main(int argc, const char * argv[]) {
    
    char x[] = "12345";
    printf("%zd\n", mystrlen(x));
    return 0;
}

由此可以得出,char x[]实际上是被赋给了char *s,即s = x;这样,函数内部就可以对s进行指针运算,让它指向不同的对象,就好像上面的代码s++所做的一样,而x++就不行。

所以,以下用法都是正确的:

mystrlen("Hello World!");
mystrlen(array);
mystrlen(ptr);

数组名作为形参

所有代码同上面一样,只是将形参char *s改为char s[]。两者完全通用,效果一致。但是前面不是说过作为指针的数组名不能改变吗?为什么在s是数组名的情况下,s++依然正确呢?

上一篇 下一篇

猜你喜欢

热点阅读