C语言传递简单字符串

取决于不同的字符串声明方式,有几种方法可以把字符串的地址传递给函数。在本节中,我们会利用一个模拟strlen的函数说明这些技术,该函数的实现如下代码所示。我们用括号来强制后面的自增操作符先执行,使得指针加1。否则加1的就是string引用的字符了,这不是我们想要的结果。

size_t stringLength(char* string) {
    size_t length = 0;
    while(*(string++)) {
        length++;
    }
    return length;
}

注意 字符串实际上应该以char常量的指针的形式传递,5.3.2节会讨论这一点。

让我们从下面的声明开始:

char simpleArray[] = "simple string";
char *simplePtr = (char*)malloc(strlen("simple string")+1);
strcpy(simplePtr, "simple string");

要对这个指针调用此函数,只要用指针名字即可:

printf("%d\n",stringLength(simplePtr));

要使用数组调用函数,我们有三种选择,如下所示。在第一个语句中,我们用了数组的名字,这会返回其地址。在第二个语句中,显式使用了取地址操作符,不过这样写有冗余,没有必要,而且会产生警告。在第三个语句中,我们对数组第一个元素用了取地址操作符,这样可以工作,不过有点繁琐:

printf("%d\n",stringLength(simpleArray));
printf("%d\n",stringLength(&simpleArray));
printf("%d\n",stringLength(&simpleArray[0]));

图5-12说明了stringLength函数的内存分配情况。

传递字符串

现在让我们把注意力转移到形参的声明方式上。在前面stringLength的实现中,我们把参数声明为char指针,不过也可以像下面这样用数组表示法:

size_t stringLength(char string[]) { ... }

函数体还是一样,这个变化不会对函数的调用方式及其行为造成影响。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程