【发布时间】:2021-12-23 03:19:11
【问题描述】:
我想通过作为参数给出的指针*address 返回函数的结果。我下面的代码打印了这个输出:
Result:
但我期待:
Result: 123456
为什么没有按预期工作?
#include <stdio.h>
static void get_address(char *address) {
address = "123456";
}
int main(int argc, const char * argv[]) {
char address[34];
get_address(address);
printf("Result: %s\n",address);
return 0;
}
【问题讨论】:
-
addressin get_address 是指向 main 中address的本地指针。更改指针对 main 没有影响。 -
在 C 中,所有参数都是 按值传递。这意味着当您调用函数时,参数值会复制到函数的局部参数变量中。以任何方式修改此副本(例如分配给它)都不会更改原始值。
-
我很确定这是重复的。简而言之,
get_address在指针的副本 中传递main中的34 个字符数组的地址。它更改副本,使其指向字符“123456”的常量数组,但main中的同名变量不会更改。将传递给get_address()的参数与main()中的局部变量同名并没有帮助 -
你可能想要这个:
static void get_address(char* address) { strcpy(address, "123456"); }。并且不要忘记`#include -
此外,您的前提是错误的,您实际上是尝试分配给一个数组,这是不可能的。您只能复制 到数组。从这里应该很容易弄清楚如何解决您的问题:您需要将字符串复制到
address。与例如strcpy.