【发布时间】:2019-06-22 23:38:48
【问题描述】:
我正在尝试学习 C 并阅读 K&R 书籍。网上的很多例子似乎都使用指针从函数中返回值。我会认为这个 K & R 函数也会使用相同的方法:
/*
Reverse a string in place
*/
void reverse(char s[])
{
int c, i, j;
for (i = 0, j = strlen(s) - 1; i < j; i++, j--)
{
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
int main()
{
char s[] = "HELLO";
reverse(s);
printf("%s", s);
return (0);
}
我认为在这种情况下字符串不会被反转。然而,它会按照作者最初的意图向后打印 char 数组。
它是如何做到的?我还不完全理解指针,但我想它会像 reverse(&s) 然后 void reverse(char *s[]) {...}
【问题讨论】:
-
拿笔和纸。使用这些工具执行程序。一切都会变得清晰
-
In C, are arrays pointers or used as pointers? 的可能重复项 接受的答案应该会有所帮助
-
void reverse(char s[]);与void reverse(char *s);100% 完全相同 -
参数
s是一个char *,因为在参数列表中使用了符号char s[]。这是数组下标的直接使用。由于参数不是字符串文字,它应该可以正常工作(只要您不将空字符串传递给函数)。 -
想象
int a[] = {1,2}; int c; c=a[0]; a[0] = a[1]; a[1] =c;会发生什么?