首先是代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void test (char* word)
{
char y[20] = "hlajwoma";
word = &y;
}
int main()
{
char* words[3] = {NULL};
test(words[1]);
words[0] = "LOL0";
words[1] = "LOL1";
words[2] = "LOL2";
printf("%s\n%s\n%s", words[0], words[1], words[2]);
return 0;
}
所以我想在这里做的是,你可以看到我有一个称为单词的 char* 数组。该数组存储元素的内存地址。我选择要编辑的单词[1],但它不起作用。
您能给我指点方向吗?
最佳答案
一个问题是参数按值传递,基本上意味着它们被复制到函数中的局部变量中。更改副本当然不会更改原始变量,而且一旦函数返回,局部变量就会超出范围并不再存在。通常,您可以使用按引用传递来解决该问题,这在 C 中不存在,但可以用指针模拟。因此,您需要传递一个指向指针的指针作为参数,并在函数中使用解引用来更改值。
但是这让我们回到了整个“局部变量”的问题,以及它们一旦超出范围就如何不再存在。由于您想让指针指向本地数组y
,因此一旦函数返回,指针将不再有效,并且使用指针将导致未定义的行为。 p>
实际的问题是您在执行分配之前调用函数进行“修改”。一旦解决了上述问题,您可能应该更改执行操作的顺序。
关于更改 char* 数组中元素的地址? C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41900680/