gpt4 book ai didi

c - 为什么向前移动指针不影响外部功能?

转载 作者:太空狗 更新时间:2023-10-29 16:07:31 25 4
gpt4 key购买 nike

我有以下函数用于计算字符串中的空格:

int countSpace(char *str) {
int nSpaces = 0;
while (*(str) != '\0') {
if (*(str) == ' ') {
nSpaces++;
}
str++;
}
return nSpaces;
}

我是这样使用这个函数的:

char a[]="Hello ";
printf("%d", countSpace(a));

我的问题是,当我这样做时:printf("%s", a);,在调用 countSpace 之后,为什么 a 没有指向结尾?我的意思是,我已经增加了 countSpace 函数内部的指针,但外部似乎仍然指向最开始。这是为什么?

我知道我在 countSpace 函数内部对 *str 所做的更改会影响外部,因此如果我这样做:str[0] = 'p',在外部函数 a 的值将是 pola。所以,我不明白为什么指针仍然指向最开始的地方,即使在函数内部我已经让它向前移动了。

最佳答案

因为 C 按值传递参数

  int countSpace(char *str)
^^
This pointer is a copy of the pointer you pass in.

最初,您的 str 变量指向与您的指针相同的东西传递给您的函数,但在 countSpace() 内部,您只是增加了该指针的本地副本。

关于c - 为什么向前移动指针不影响外部功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22748603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com