C 函数实现 - 带指针与不带指针

标签 c pointers

我刚开始使用 C,在我以前使用的语言中从来没有处理过指针,所以我想知道如果只修改一个字符串,哪种方法更好。

指针字符串与正常。

此外,如果您想提供有关何时使用指针的更多信息,那会很棒。当我发现函数“normal”甚至会修改传递的字符串,并在没有返回值的情况下在主函数中更新时,我感到震惊。

#include <stdio.h>

void pointerstring(char *s);
void normal(char s[]);

int main() {
    char string[20];
    pointerstring(string);
    printf("\nPointer: %s\n",string);
    normal(string);
    printf("Normal: %s\n",string);
}

void pointerstring(char *s) {
    sprintf(s,"Hello");
}
void normal(char s[]) {
    sprintf(s,"World");
}

输出:

Pointer: Hello
Normal: World

最佳答案

在函数声明中,char []char * 是等价的。具有外层数组类型的函数参数被转换为等效的指针类型;这会影响调用代码和函数体本身。

因此,最好使用 char * 语法,否则您可能会感到困惑并尝试使用例如获取外层定长数组类型参数的sizeof:

void foo(char s[10]) {
    printf("%z\n", sizeof(s));  // prints 4 (or 8), not 10
}

当您传递声明为指向函数的指针的参数(并且指针参数未声明为 const)时,您明确授予函数修改指针指向的对象或数组的权限.

关于C 函数实现 - 带指针与不带指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12089478/

相关文章:

c - 在 C 函数中初始化静态数组

c - 关于C语言中传递变量的问题

c - 将空值分配给指针的地址

c++ - 有指针的计算机实验室

objective-c - Xcode .c 文件将消息发送到 Objective-c (.m) 文件

c - 元素不在C中进入数组

c - 尝试将值转换为 C 中的 2s 补码

c - 为什么我们不需要取消引用命令行参数(简单)

c - 如何从c字符串中提取地址

C 如何将指针传递到文件中的位置以供读取